Побітові оператори в JavaScript

Ці оператори працюють на 32-бітних цілих числах. Кожен оператор виконує дію над окремими бітами числа.

Таблиця операторів:

ОператорНазваПрикладПояснення (у бітах)РезультатДесяткове
&І (AND)5 & 10101 & 000100011
|АБО (OR)5 | 10101 | 000101015
~НЕ (NOT)~5~01011010-6*
^ВИКЛЮЧНЕ АБО (XOR)5 ^ 10101 ^ 000101004
<<Зсув вліво5 << 10101 << 1101010
>>Зсув вправо5 >> 10101 >> 100102
>>>Беззнаковий зсув5 >>> 10101 >>> 100102

* ~5 насправді дорівнює -6, оскільки ~ інвертує всі біти 32-бітного числа.


Просте пояснення:

  • & (AND): повертає 1 тільки якщо обидва біти 1.
  • | (OR): повертає 1 якщо хоча б один біт 1.
  • ~ (NOT): інвертує всі біти (тобто 0 стає 1, і навпаки).
  • ^ (XOR): повертає 1 тільки якщо біти різні.
  • << (зсув вліво): зміщує біти вліво, додає 0 справа.
  • >> (зсув вправо): зміщує біти вправо, зберігаючи знак (для від’ємних чисел).
  • >>> (беззнаковий зсув вправо): зсув вправо без збереження знаку (незалежно від того, чи число додатне/від’ємне).

Побітові оператори з присвоєнням

Є два числа — x і y. Ми хочемо щось зробити з їхніми бітами (нулями та одиницями), і зберегти результат у x.


x &= yAND (І)

jsCopyEditx &= y  // те саме, що x = x & y

Кожен біт: буде 1 тільки якщо і в x, і в y був 1.

Приклад:

jsCopyEditlet x = 5; // 0101
let y = 3; // 0011
x &= y;    // 0001 (тобто 1)

x ^= yXOR (виключне АБО)

jsCopyEditx ^= y  // те саме, що x = x ^ y

Кожен біт: буде 1, якщо тільки один з них — 1, але не обидва.

Приклад:

jsCopyEditlet x = 5; // 0101
let y = 3; // 0011
x ^= y;    // 0110 (тобто 6)

x |= yOR (АБО)

jsCopyEditx |= y  // те саме, що x = x | y

Кожен біт: буде 1, якщо хоча б один з них 1.

Приклад:

jsCopyEditlet x = 5; // 0101
let y = 3; // 0011
x |= y;    // 0111 (тобто 7)

Уяви, що x і y — це два рядки з лампочками (0 — лампочка вимкнена, 1 — увімкнена):

ОператорЩо робитьМнемоніка
&=Лампочка світить, якщо обидві світять“обоє — так”
^=Лампочка світить, якщо тільки одна“або-або, не обидві”
|=Лампочка світить, якщо хоч одна“якщо хоча б один — так”, то результат — теж “так” (тобто 1)