|
Программирование >> Структурное программирование
numberl = 15; setBits = 241; cout endl Результат объединения значений endl; displayBits(numberl); displayBits(setBits); cout << операцией поразрядное ИЛИ равен << endl; displayBits(numberl setBits); numberl = 13 9; number2 = 199; cout << endl Результат объединения значений endl; displayBits(numberl); displayBits(number2); cout операцией поразрядное исключающее ИЛИ равен endl; displayBits(numberl number2); numberl = 21845; cout endl Результат применения операции поразрядное НЕ ~ к значению << endl; displayBits(numberl); cout равен endl; displayBits(-numberl); return 0; void displayBits(unsigned value) { unsigned c, displayMasJc = 1 15; cout setw(7) value = ; for (c = 1; с <= 16; С++) { cout (value & displayMask ? 1 value = 1; if (c % 8 == 0) cout ; cout endl; Рис. 16.7. Использование операций поразрядное И, исключающее ИЛИ и поразрядное НЕ поразрядное ИЛИ, поразрядное часть 2 из 2) В программе на рис. 16.7 переменной mask присваивается значение 1 (00000000 00000001), а переменной numberl присваивается значение 65535 (11111111 11111111). Затем значения переменных mask и numberl соединяются операцией поразрядное И (&) в выражении mask & numberl и в результате получается значение 00000000 00000001. Все биты, за исключением бита самого младшего разряда в переменной numberl маскированы (скрыты) применением операции поразрядное И с маской mask. Операция поразрядное ИЛИ используется для установки в операнде указанных битов в 1. В программе на рис. 17.7 переменной numberl присваивается значение 15 (00000000 00001111), а переменной setBits присваивается
Рис. 16.9. Результаты применения к двум битам операции поразрядное ИЛИ Операция поразрядное исключающее ИЛИ ( ) устанавливает бит результата в 1, если в одном и только в одном из двух операндов соответствующий бит равен 1. В программе на рис. 16.7 переменным numberl и number2 присваиваются соответственно значения 139 (00000000 10001011) и 199 (00000000 11000111). Если эти переменные соединяются операцией поразрядное исключающее ИЛИ в выражении numberl number2, то результат равен 00000000 01001100. На рис. 16.10 показаны результаты выполнения операции поразрядное исключающее ИЛИ для двух битов. значение 241 (00000000 11110001). Когда значения переменных numberl и setBits объединяются операцией поразрядное ИЛИ в выражении numberl setBits, результат равен 255 (00000000 11111111). На рис. 16.9 показаны результаты выполнения операции поразрядное ИЛИ для двух битов. Результат обьединения значений 65535 = 11111111 11111111 1 = 00000000 00000001 операцией поразрядное И С, равен 1 = 00000000 00000001 I Результат объединения значений I 15 = 00000000 00001111 1 241 = 00000000 11110001 I операцией поразрядное ИЛИ равен I 255 = 00000000 11111111 I Результат объединения значений I 139 = 00000000 10001011 I 199 = 00000000 11000111 I операцией поразрядное исключающее ИЛИ равен I 76 = 00000000 01001100 I Результат применения операции поразрядное НЕ ~ к значению I 21845 = 01010101 01010101 1 равен 1 43690 = 10101010 10101010 Рис. 16.8. Выходные данные для программы, приведенной на рис. 16.7 Типичная ошибка программирования 16.7 Использование операции логическое ИЛИ ( ) вместо операции поразрядное ИЛИ ( ) и наоборот. Операция поразрядное НЕ (поразрядное дополнение) (-) устанавливает биты со значением 1 в О, а биты со значением О в 1; это называется также дополнением значения до единицы. В программе на рис. 16.7 переменной numberl присваивается значение 21845 (01010101 01010101). Затем вычисляется выражение -numberl, результат которого равен (10101010 10101010).
Рис. 18.10. Результаты применения к двум битам операции поразрядное исключающее ИЛИ Программа, приведенная на рис. 16.11, демонстрирует применение операций сдвига влево ( ) и вправо ( ). Функция displayBits используется для печати целых значений типа unsigned. Использование операций поразрядного сдвига #include <iostream.h> #include <iomanip.h> void displayBits (unsigned); main() unsigned numberl = 960; cout << Результат сдвига влево <<endl; displayBits(numberl); cout << на 8 битов с использованием операции сдвига влево <<: endl; displayBits(numberl << 8); cout << endl << Результат сдвига вправо << endl; displayBits(numberl); cout << на 8 битов с использованием операции сдвига вправо >>: << endl; displayBits(numberl >> 8); return 0; void displayBits(unsigned value) { unsigned c, displayMaslc = 1 15; cout setw(7) value = ; for (c = 1; с <= 16; С++) { cout << (value & displayMask ? 1 : 0); value <<= 1; if (c % 8 == 0) cout ; cout endl; Рис. 16.11. Использование операций поразрядного сдвига (часть 1 из 2)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |