§ 12. Побитовые операторы

Побитовые операторы используются для манипуляции отдельными битами числа или всеми сразу. Битовые маски применяются для кодирования параметров устройств и функций, для работы с IP-адресами и так далее.

Побитовый сдвиг влево: все биты сдвигаются влево, самый левый бит теряется, справа приписывается 0. Эквивалентно умножению на 2.

unsigned short a = 1093;        // 00000100 01000101 (1093)
unsigned short result = a << 1; // 00001000 10001010 (2186).

Побитовый сдвиг вправо: все биты сдвигаются вправо, самый правый бит теряется, слева приписывается 0. Эквивалентно делению на 2.

unsigned short a = 3511;        // 00001101 10110111 (3511)
unsigned short result = a >> 1; // 00000110 11011011 (1755).

Логическое побитовое отрицание: нули и единицы меняются местами.

unsigned short a = 5;           // 00000000 00000101 (5)
unsigned short result = ~a;     // 11111111 11111010 (65530).

Логическое побитовое умножение.

unsigned short b = 13;          // 00000000 00001101 (13)
unsigned short a = 563;         // 00000010 00110011 (563)
unsigned short result = a & b;  // 00000000 00000001 (1).

Логическое побитовое сложение.

unsigned short b = 13;          // 00000000 00001101 (13)
unsigned short a = 563;         // 00000010 00110011 (563)
unsigned short result = a | b;  // 00000010 00111111 (319).

Побитовое исключающее ИЛИ (XOR).

unsigned short b = 13;          // 00000000 00001101 (13)
unsigned short a = 563;         // 00000010 00110011 (563)
unsigned short result = a ^ b;  // 00000010 00111110 (574).

Конечно же, есть сокращённые версии операторов для специфических случаев.

foo <<= 1;  // foo = foo << 1;
foo >>= 1;  // foo = foo >> 1;
foo &= bar; // foo = foo & bar;
foo |= bar; // foo = foo | bar;
foo ^= bar; // foo = foo ^ bar;

Теперь, когда вы изучили самые разные операторы языка, ознакомьтесь с приоритетами операторов, воспользовавшись справочной литературой.

14 июня