Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб_1_метод_указания прога.doc
Скачиваний:
3
Добавлен:
03.11.2018
Размер:
301.57 Кб
Скачать

Примеры использования операций отношения

#include <iostream.h>

#include <conio.h>

int main()

{

int numb;

cout << "Enter a number: ";

cin >> numb;

cout << "numb<10 is= " << (numb < 10) << endl;

cout << "numb>10 is = " << (numb > 10) << endl;

cout << "numb==10 is= " << (numb == 10) << endl;

_getch();

return 0;

}

Варианты запуска программы:

Enter a number: 1

numb<10 is 1

numb>10 is 0

numb==10 is 0

Enter a number: 10

numb<10 is 0

numb>10 is 0

numb==10 is 1

Примеры использования поразрядных логических операций: Поразрядное логическое умножение:

Пример 1.

12 & 22 = 4, так как:

1210 = С16 = 000011002 (для типа char)

&

2210 =1616 = 000101102

000001002 = 410

Пример 2.

char i, j, k; i=5;

j=3;

k= i & j;

k==1, т.к. в двоичной системе имеем: 00000101(i) & 00000011(j) = 00000001 (k).

Логический сдвиг:

Пример 3.

2 << 7 = 256, так как:

210 = 00000000 000000102 (для типа unsigned short)

сдвиг влево на 7 разрядов этого числа дает перенос 1 на 7 разрядов влево:

00000001 000000002 = 1 * 28 = 256;

Пример 4.

256 >> 6 = 4, так как:

25610 = 00000001 000000002 (для типа unsigned short)

сдвиг вправо на 6 разрядов этого числа дает перенос 1 на 6 разрядов вправо:

00000000 000001002 = 410;

Поразрядное логическое сложение:

Пример 5.

12 | 22 = 30, так как:

1210 = С16 = 000011002 (для типа char)

(поразрядное сложение - or) +

2210 =1616 = 000101102

__________

000111102 = 1* 24 +1*23+ 1*22+ 1* 21 =3010;

Сложение по модулю 2 (исключающее или):

Пример 6.

12 ^ 22 = 26, так как:

1210 = С16 = 000011002 (для типа char)

(операция ^)

2210 =1616 = 000101102

__________

000110102 = 1* 24 +1*23+ 1* 21 =2610;

Примеры более сложного использования поразрядных логических операций:

Пример 7. Вычислить и вывести на экран результат логического выражения для заданных значений логических переменных a, b, c:

#include <stdio.h>

#include <conio.h>

int main()

{bool a, b, c, d;

a = true; b=true; c = false;

d = a && (!(b &&(!c)));

printf (" %d\n", d); // 0

_getch();

return 0;

}

Пример 8. Вычислить и вывести на экран результат логического выражения для заданных значений целых переменных a, b, c:

a || b && c

#include <stdio.h>

#include <conio.h>

int main()

{bool a, b, c, d;

int ia, ib, ic;

printf (" input a, b, c:\n");

printf ("0 - true, 1 - false:\n");

scanf ("%i%i%i, ", &ia, &ib, &ic);

a = bool(ia); b=bool (ib); c = bool(ic);

d = a || b &&c;

printf ("d= %d\n", d);

_getch();

return 0;

}

Результат:

1 1 1

d= 1

Пример 9. Присвоить логической переменной b значение логического выражения, истинного при выполнении условия «целые n и k имеют одинаковую четность» и ложного в противном случае:.

#include <stdio.h>

#include <conio.h>

int main()

{int n, k;

bool b;

printf ("input n,k:\n");

scanf ("%i%i", &n, &k);

b = (n % 2 == k % 2);

printf ("b=%d\n", b);

_getch();

return 0;

}

Результат:

4 8

b=1

Пример 10.

С помощью поразрядной логической операции & легко найти остаток от деления на 2, 4 и т.д.:

unsigned ui, mask = 0x01; //(при делении на 2); 0x03 (на 4); 0x07 (на 8); 0x0f (на 16); 0x1f (на 32);

ui =7;

ui & mask; //- значение разряда, который «уходит» при делении на 2 последний раз

00000111 - это 7

00000001 - это 2

------------

00000001 - это 1 (результат операции 7 & 2)

Пример 11.

С помощью поразрядной логической операции & можно проверить наличие единицы в любом разряде:

проверить наличие единицы в бите №4 переменной х типа char поможет логическое выражение: (х & 16) == 16;

проверить наличие единицы в битах №4, №2, №1 переменной х типа char поможет логическое выражение: (х & 22) == 22;

Пример 12.

С помощью поразрядной логической операции & можно «выключить» значение любого бита:

выключить бит №2 переменной х типа char (при неизменном значении других битов) поможет логическое выражение: х & 251 (255 – это единицы во всех разрядах, логическое выражение (х & 255) – оставит без изменения значения всех битов, бит 2 имеет значение 4, х & (255-4) – обнулит только бит номер 2;

Пример 13.

С помощью поразрядной логической операции | можно «включить» значение любого бита:

включить бит №2 переменной х типа char (при неизменном значении других битов) поможет логическое выражение: х | 4;

включить биты №4, №2, №1, №0 переменной х типа char (при неизменном значении других битов) поможет логическое выражение: х | 23;

Пример 14.

int sx=-8;

unsigned ux = -8;

printf (”sx=%o\n”, sx); // 177770

printf (”ux=%o\n”, ux); // 177770

printf (”sx>>3=%o\n”, sx>>3); // 177777 или 017777

printf (”ux>>3=%o\n”, ux>>3); // 017777

printf (”sx>>3=%d\n”, sx>>3); // -1 или 8191

printf (”ux>>3=%d\n”, ux>>3); // 0177778 = 1FFF= 8191

Пример 15.

Операция Y = X & 15 или ее аналог Y = X & $F – выделяет 4 младших разряда переменной Х (типа char), т.к. $F = 15 = 00001111. Старшие разряды обнуляются независимо от их значения, младшие – сохраняются.

Пример 16.

От прибора в ЭВМ поступает 16-разрядный код (справа налево номера от 0 до 15). Допустим, в разрядах 0-4 находится информация от первого датчика, 5-11 – от датчика 2, с 12 по 14 – от датчика 3. Рассмотрим алгоритм выделения информации от каждого из датчиков:

int Х, XX, x1, x2, x3; {ХX – исходная интегрированная информация} {x1, x2, x3 – выделенная информация от датчиков} . . . . . X = XX; x1 = X & 31; {выделяются разряды с 0 по 4 –- 31 =0000 0000 0001 1111}

X = X / 32; {происходит сдвиг Х на 5 разрядов вправо,}

{ аналог – команда Х >> 5}

x2 = X & 127; {выделяются очередные 7 разрядов, бывшие разряды 5-11}

{127 = $7F = 0000 0000 0111 1111}

X = X / 128; {производится сдвиг вправо очередных 7-и разрядов}

x3 =X & 7; {выделяются младшие 3 разряда, бывшие 12 - 14}

Пример 17.

Состояние 3-х кнопок мыши возвращается в переменной Button (тип char) в такой последовательности: левая, правая, средняя в разряды 0 –2. Тогда для анализа состояния кнопок мыши можно использовать операторы:

LeftButton = (Button & 1) == 1;

RightButton = (Button & 2) == 2;

LeftRightButton = (Button & 3) == 3;

MiddleButton = (Button & 4) == 4;

LeftMiddleButton = (Button & 5) == 5;