Бит – 0 или 1.
& – побитовое И
| – побитовое ИЛИ
~ – побитовое НЕ (инверсия)
^ – побитовое исключающее ИЛИ (сложение по модулю 2)
A | B | A & B | A | B | A ^ B | ~A |
~B |
1 | 1 | 1 | 1 | 0 | 0 |
0 |
1 | 0 | 0 | 1 | 1 | 0 |
1 |
0 | 1 | 0 | 1 | 1 | 1 |
0 |
0 | 0 | 0 | 0 | 0 | 1 |
1 |
Пример.
1 |
cout<<(15&23); //на экран выведется 7 |
<< побитовый сдвиг влево.
>> побитовый сдвиг вправо.
Операторы побитового сдвига следует отличать от операторов ввода и вывода.
выходной поток << выражение – оператор вывода.
целое << целое – побитовый сдвиг.
Пример.
1 |
cout<<(7<<2); //на экран выведется 28 |
1 |
cout<<(8>>2); //на экран выведется 2 |
Пример использования побитовых операторов.
Проверка четности целого числа.
Если число четное => последняя цифра 0, число не четное => последняя цифра 1 (в двоичной).
1 2 |
if (a&1==0) cout<<"Число четное"; if (a&1==1) cout<<"Число не четное"; |
Побитовые операторы с присваиванием
&= побитовое И с присваиванием
|= побитовое ИЛИ с присваиванием
^= побитовое исключающее ИЛИ с присваиванием
<<= побитовый сдвиг влево с присваиванием
>>= побитовый сдвиг вправо с присваиванием
Все побитовые операторы с присваиванием бинарные.
Левый операнд такого оператора это переменная. Правый операнд целое число.
В результате выполнения побитового оператора с присваиванием вычисляется значение левого операнда с побитовым оператором и правым операндом, и результат вычисления присваивается левому операнду.
Пример.
1 2 3 |
int a = 1; a <<= 1; //a = 2 cout<<a; //на экран выведется 2 |
1 2 |
a <<= 2; //a = 8 cout<<a; //на экран выведется 8 |
1 2 |
a |= 56; //a = 56 cout<<a; //на экран выведется 56 |