Программирование >>  Структурное программирование 

1 ... 284 285 286 [ 287 ] 288 289 290 ... 342


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 присваивается



Бит 1

Бит 2

Бит 1 1 Бит 2

Рис. 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).

Бит1

Бит 2

Бит 1 А Бит 2

Рис. 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)



1 ... 284 285 286 [ 287 ] 288 289 290 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика