Побитовые операторы используются для манипуляции отдельными битами числа или всеми сразу. Битовые маски применяются для кодирования параметров устройств и функций, для работы с 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;
Теперь, когда вы изучили самые разные операторы языка, ознакомьтесь с приоритетами операторов, воспользовавшись справочной литературой.