В этом руководстве вы узнаете о побитовых операторах JavaScript и их типах с помощью примеров.
Побитовые операторы JavaScript
Поразрядные операторы обрабатывают его операнды как набор 32-битных двоичных цифр (нулей и единиц) и выполняют действия. Однако результат отображается в виде десятичного числа.
Операторы | имя | пример |
---|---|---|
& | Побитовое И | x & y |
| | Побитовое ИЛИ | x | y |
^ | Побитовое исключающее ИЛИ | x y |
~ | Побитовое НЕ | ~x |
<< | Левый "шифт | x << y |
>> | Распространение знака вправо | x>> y |
>>> | Сдвиг вправо с нулевым заполнением | x>>> y |
Примечание . Минимальное и максимальное целые числа, которые могут быть представлены 32-разрядным числом со знаком, составляют от -2147483648 до 2147483647.
JavaScript побитовое И
Побитовое И &
возвращает 1, если соответствующие биты обоих операндов равны 1, в противном случае возвращается 0 .
Операнд 1 | Операнд 2 | И операция |
---|---|---|
0 | 0 | 0 & 0 есть 0 |
0 | 1 | 0 & 1 есть 0 |
1 | 0 | 1 & 0 есть 0 |
1 | 1 | 1 & 1 является 1 |
Давайте посмотрим на операцию побитового И двух целых чисел 12 и 25 .
В двоичном формате 12 = 01100 25 = 11001 // Побитовая операция И для 12 и 25 00001100 и 00011001 --------- 00001000 = 8 (в десятичном формате)
Примечание : Преобразование 12 до 32-разрядных двоичного дает нам 00000000000000000000000000001100
и 25 дает 00000000000000000000000000011001
. Однако для простоты мы удалили предыдущие нули.
Пример 1: Побитовый оператор И
// bitwise AND operator example let a = 12; let b = 25; result = a & b; console.log(result); // 8
В приведенной выше программе
- Двоичное значение 12 равно
00000000000000000000000000001100
- Двоичное значение 25 равно
00000000000000000000000000011001
. - Когда выполняется побитовая операция И , двоичный результат будет
00000000000000000000000000001000
преобразован в десятичное значение 8.
Побитовое ИЛИ JavaScript
Поразрядное ИЛИ |
возвращает 1, если один из соответствующих битов одного операнда равен 1, иначе возвращает 0 .
Операнд 1 | Операнд 2 | ИЛИ Операция |
---|---|---|
0 | 0 | 0 | 0 есть 0 |
0 | 1 | 0 | 1 является 1 |
1 | 0 | 1 | 0 является 1 |
1 | 1 | 1 | 1 является 1 |
Давайте посмотрим на операцию поразрядного ИЛИ двух целых чисел 12 и 25 .
В двоичном формате 12 = 01100 25 = 11001 // Побитовая операция ИЛИ для 12 и 25 00001100 | 00011001 -------- 00011101 = 29 (в десятичной системе)
Пример 2: побитовый оператор ИЛИ
// bitwise OR operator example let a = 12; let b = 25; result = a | b; console.log(result); // 29
Когда выполняется побитовая операция ИЛИ , двоичный результат будет 00000000000000000000000000011101
преобразован в десятичное значение 29.
Побитовое исключающее ИЛИ в JavaScript
Побитовое исключающее ИЛИ ^
возвращает 1, если соответствующие биты различны, и 0, если соответствующие биты совпадают.
Операнд 1 | Операнд 2 | Операция XOR |
---|---|---|
0 | 0 | 0 0 есть 0 |
0 | 1 | 0 1 является 1 |
1 | 0 | 1 0 является 1 |
1 | 1 | 1 1 есть 0 |
В двоичном формате 12 = 01100 25 = 11001 // Побитовая операция XOR для 12 и 25 00001100 00011001 -------- 00010101 = 21 (в десятичной системе)
Пример 3: побитовый оператор XOR
// bitwise XOR operator example let a = 12; let b = 25; result = a b; console.log(result); // 21
Когда выполняется побитовая операция XOR , двоичный результат будет 00000000000000000000000000010101
преобразован в десятичное значение 21.
Побитовое НЕ в JavaScript
Bitwise NOT ~
inverts the bit( 0 becomes 1, 1 becomes 0).
In binary, 12 = 00000000000000000000000000001100 // Bitwise Not Operation of 12 ~ 00000000000000000000000000001100 --------------------------------- 11111111111111111111111111110011 = -13(In decimal)
While converting 11111111111111111111111111110011
to decimal, the value would be 4294967283. But when using bitwise operator, the value is computed in signed 2's complement format except for zero-fill right shift.
2's complement is computed by inverting the bits(1's complement) and then adding 1. For example,
13 in binary: 00000000000000000000000000001101 1's complement of 13: 11111111111111111111111111110010 2's complement of 13: 11111111111111111111111111110010 +1 --------------------------------- 11111111111111111111111111110011
Notice the 2's complement of 13 (i.e. -13) is 11111111111111111111111111110011
. This value is equivalent to the bitwise NOT of 12.
Example 4: Bitwise NOT Operator
// bitwise NOT operator example let b = 12; result = ~b; console.log(result); // -13
When bitwise NOT operation is performed, the binary result will be 11111111111111111111111111110011
which converts into the decimal value -13.
Note: Bitwise NOT of a number x gives -(x + 1). Notice above ~2
gives -3.
JavaScript Left shift
В операторе сдвига <<
влево левый операнд указывает число, а правый операнд указывает число, которое нужно сдвинуть влево. Нулевые биты добавляются справа, а лишние биты слева отбрасываются.

Например,
let a = 8; let b = 1; result = a << b; // 1 ( 00000000000000000000000000010000 ) console.log(result);
Сдвиг вправо, распространяющий знак JavaScript
В операторе сдвига вправо >>
первый операнд указывает число, а второй операнд указывает число, которое нужно сдвинуть вправо. Лишние биты справа отбрасываются. Копии крайнего левого бита смещаются слева, отсюда и название - знаковый.

Например,
let a = 8; let b = 1; // 11111111111111111111111111111101 let c = -3; result = a>> b; result1 = c>> b; // 4 (00000000000000000000000000000100) console.log(result); // -1 (11111111111111111111111111111111) console.log(result1);
JavaScript Сдвиг вправо с нулевым заполнением
Сдвиг >>>
вправо с заполнением нуля сдвигает операнд вправо путем заполнения нулевых битов влево. Лишние биты справа отбрасываются.

Например,
let a = 8; let b = 1; let c = -3; result = a>>> b; result1 = c>>> b; // 4 (00000000000000000000000000000100) console.log(result); // 1073741823 (00111111111111111111111111111111) console.log(result);