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