1. Побітовий оператор AND

Колись ми говорили, що всі дані зберігаються в пам'яті у двійковій системі. Тому досить давно програмісти придумали багато чого цікавого для роботи з двійковим поданням чисел. Наприклад, у Java є логічні оператори, які працюють з бітами чисел: AND (І), OR (АБО), NOT (НЕ) и XOR (виключне АБО).

a & b
Побітовий оператор AND (І)

Цей оператор дуже схожий на логічний оператор AND (І), тільки позначається не двома амперсандами, а одним:

І застосовується він не до числа в цілому, а до його бітів: число розглядається як масив бітів, й i-й біт числа-результату обчислюється на основі i-х бітів кожного з двох чисел.

Перший біт результату буде обчислюватися на основі першого біта числа a і першого біта числа b, другий біт — на основі другого біта числа a і другого біта числа b і т. д.

Ну а оператор AND (І) означає, що «біт результату дорівнює одиниці, тільки якщо біт числа a дорівнює одиниці І біт числа b дорівнює одиниці»:

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

Приклади:

Приклад Результат
0b0011 & 0b1010
0b0010
0b1111 & 0b0000
0b0000
0b1010 & 0b0101
0b0000
0b1111 & 0b1010
0b1010

2. Побітовий оператор OR

Цей оператор дуже схожий на логічний оператор OR (АБО), тільки позначається вже не двома вертикальними лініями, а однією:

a | b

Він також застосовується не до числа в цілому, а до його бітів: i-й біт числа-результату обчислюється на основі i-х бітів кожного з двох чисел.

Побітовий оператор OR (АБО) означає, що «біт результату дорівнює одиниці, якщо біт числа a дорівнює одиниці АБО біт числа b дорівнює одиниці»:

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

Приклади:

Приклад Результат
0b0011 | 0b1010
0b1011
0b1110 | 0b0000
0b1110
0b1010 | 0b0101
0b1111
0b1111 | 0b1010
0b1111

Тільки коли біти, що стоять на однакових позиціях обох чисел, дорівнюють нулю, відповідний біт результату дорівнює нулю.



3. Побітовий оператор XOR (ВИКЛЮЧНЕ АБО)

Оператор XOR, який інакше називають виключне або, позначається символом ^. Щоб увести його з клавіатури, потрібно натиснути shift+6 (в англійській розкладці).

a ^ b

Цей оператор чимось схожий на оператор OR (він навіть має схожу назву — XOR).

Побітовий оператор XOR (ВИКЛЮЧНЕ АБО) означає, що «біт результату дорівнює одиниці, якщо біт числа a дорівнює одиниці АБО біт числа b дорівнює одиниці, але не обидва одночасно»:

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

Приклади:

Приклад Результат
0b0011 ^ 0b1010
0b1001
0b1110 ^ 0b0000
0b1110
0b1010 ^ 0b0101
0b1111
0b1111 ^ 0b1010
0b0101

Тільки коли біти, що стоять на однакових позиціях обох чисел, різні, відповідний біт результату дорівнює одиниці. Якщо біти однакові, біт результату дорівнює нулю.


4. Побітовий оператор NOT (НЕ, ЗАПЕРЕЧЕННЯ)

Думаю, ви вже здогадуєтеся, що він означає. Цей оператор дуже схожий на логічний оператор NOT (НЕ), тільки позначається вже не знаком оклику, а тильдою:

~a

Цей оператор унарний: застосовується не до двох чисел, а до одного, перед яким і ставиться.

Побітовий оператор NOT означає, що «біт результату дорівнює одиниці, якщо біт числа a дорівнює нулю, і дорівнює нулю, якщо біт числа a дорівнює одиниці»:

~1 = 0
~0 = 1

Приклади:

Приклад Результат
~0b0011
0b1100
~0b0000
0b1111
~0b0101
0b1010
~0b1111
0b0000

Цей оператор просто змінює біт 1 на 0, а 0 на 1.