Справочник по C/C++
Поразрядные операторы

В языках C и C++ реализованы операторы, которые выполняют действия над битами. Поразрядные операторы можно использовать только с целыми типами.

Оператор      Значение
& И
| ИЛИ
^ Исключающее ИЛИ
~ Дополнение до 1
>> Сдвиг вправо
<< Сдвиг в лево

Операторы & | ^

Таблица истинности для операторов & | ^ имеет следующий вид.

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

При выполнении этих поразрядных операций эти правила применяются к каждому биту каждого оператора. Например.

& | ^
 0 1 0 1 1 1 0 1 
 0 0 1 1 1 0 1 1 

 0 0 0 1 1 0 0 1 
 0 1 0 0 1 1 0 1 
 0 0 1 1 1 0 1 1 

 0 1 1 1 1 1 1 1 
 0 1 0 0 1 1 0 1 
 0 0 1 1 1 0 1 1 

 0 1 1 1 0 1 1 0 

Оператор дополнения до единицы

Оператор дополнения до единицы ~, будет инвертировать все биты операнда. Например если ch имеет двоичный код
0 0 1 1 1 0 0 1 ,
то после выполнения оператора
ch = ~ch;
двоичный код переменной ch будет иметь вид
1 1 0 0 0 1 1 0 .

Операторы сдвига

Операторы сдвига вправо (>>) и влево (<<) сдвигают все биты целого значения на заданное число разрядов. Их формат следующий.

значение >> количество
значение << количество

Здесь количество означает количество позиций, на которое будет сдвинуто значение.

Если двоичный код значения (в предположении, что оно не имеет знака) равен
0 0 1 1 1 1 0 1,
то после сдвига вправо получим
0 0 0 1 1 1 1 0,
а после сдвига влево результатом будет
0 1 1 1 1 0 1 0

Поразрядные сдвиги эквивалентны умножению и делению на 2, и выполняются быстрее чем обычное умножение и деление на 2.

Далее показан приоритет поразрядных операторов.

Приоритет      Операторы
Наивысший ~
>> <<
&
^
Низший |




2016-12-25 07:47:21 Андрей

В таблице "Оператор Значение", после строки "^ Исключающее ИЛИ" должно быть: ~ 1-е дополнение Вместо названия раздела "Оператор дополнения до единицы" должно быть: Оператор первого дополнения Первое предложение в разделе должно быть: Оператор первого дополнения, ~, инвертирует все биты операнда. В разделе "Операторы &, | и ^", в первой строке примера, должно быть: & | ^

2018-08-13 23:40:31 Олег

В примере &, результат должен быть 00011001.




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: