САЙТ ДЛЯ ВЕБ РАЗРАБОТЧИКОВ НА РУССКОМ ЯЗЫКЕ

JavaScript Битовые операторы



JavaScript битовый оператор

Оператор Название Описание
& И Устанавливает каждый бит в 1, если оба бита равны 1
| ИЛИ Устанавливает каждый бит в 1, если один из двух битов равен 1
^ Исключающее ИЛИ Устанавливает каждый бит в 1, если только один из двух битов равен 1
~ НЕ Инвертирует все биты
<< Ноль заполнить левый сдвиг Сдвигает влево, нажимая нули справа, и пусть самые левые биты отключаются
>> Знаковый сдвиг вправо Сдвигает вправо, нажимая копии самого левого бита слева, и пусть самые правые биты отключаются
>>> Нулевой сдвиг вправо с заполнением Сдвигает вправо, нажимая нули слева, и пусть самые правые биты отключаются

Примеры

Операция Результат Так же, как Результат
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

JavaScript использует 32-битовые операнды

JavaScript хранит числа как 64-бита, числа с плавающей запятой, но все битовые операции выполняются над 32-битными двоичными числами.

Перед выполнением побитовой операции JavaScript преобразует числа в 32-битные целые числа со знаком.

После выполнения побитовой операции результат преобразуется обратно в 64-битные числа JavaScript.

В приведенных выше примерах используются 4 бита беззнаковых двоичных чисел. Из-за этого ~ 5 возвращает 10.

Поскольку JavaScript использует 32-битные целые числа со знаком, он не вернет 10. Он вернется -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Знаковое целое число использует самый левый бит в качестве знака минус.


Битовый И

Когда побитовое И выполняется на паре битов, она возвращает 1, если оба бита равны 1.

Одно битовый пример:
ОперацияРезультат
0 & 00
0 & 10
1 & 00
1 & 11
Четырех битовый пример:
ОперацияРезультат
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

Битовый ИЛИ

Когда побитовое ИЛИ выполняется на паре битов, оно возвращает 1, если один из битов равен 1:

Одно битовый пример:
ОперацияРезультат
0 | 00
0 | 1
1 | 01
1 | 11
Четырех битовый пример:
ОперацияРезультат
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Битовый исключающее ИЛИ

Когда побитовое Исключающее ИЛИ выполняется на паре битов, он возвращает 1, если биты отличаются:

Одно битовый пример:
ОперацияРезультат
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
Четырех битовый пример:
ОперацияРезультат
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScript битовый И (&)

Битовый и возвращает 1, только если оба бита равны 1:

ДесятичныйДвоичный
500000000000000000000000000000101
100000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

Пример

var x = 5 & 1;
Редактор кода »

JavaScript битовый ИЛИ ( | )

Битовое ИЛИ возвращает 1, если один из битов равен 1:

ДесятичныйДвоичный
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101 (5)

Пример

var x = 5 | 1;
Редактор кода »

JavaScript битовый исключающий ИЛИ ( ^ )

Битовое исключающий ИЛИ возвращает 1, если биты разные:

ДесятичныйДвоичный
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

Пример

var x = 5 ^ 1;
Редактор кода »

JavaScript битовый НЕ ( ~ )

ДесятичныйДвоичный
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

Пример

var x = ~5;
Редактор кода »

JavaScript (нулевая заливка) битовый сдвиг влево (<<)

Это смещение влево с нулевым заполнением. Один или несколько нулевых битов нажимаются справа, а самые левые биты отваливаются:

ДесятичныйДвоичный
500000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

Пример

var x = 5 << 1;
Редактор кода »

JavaScript (сохранение знака) битовое смещение вправо (>>)

Это знак, сохраняющий сдвиг вправо. Копии самого левого бита выталкиваются слева, а самые правые биты отваливаются:

ДесятичныйДвоичный
-511111111111111111111111111111011
-5 >> 111111111111111111111111111111101 (-3)

Пример

var x = -5 >> 1;
Редактор кода »

JavaScript (ноль заполнить) сдвиг вправо (>>>)

Это смещение вправо с нулевым заполнением. Один или несколько нулевых битов выталкиваются слева,а самые правые биты отваливаются:

ДесятичныйДвоичный
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

Пример

var x = 5 >>> 1;
Редактор кода »

Двоичные числа

Двоичный числа числа с одним битовым набором легкий для понимания::

Двоичное представлениеДесятичное значение
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

Установка еще нескольких битов показывает двоичный шаблон:

Двоичное представлениеДесятичное значение
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (32 + 8 + 4 + 1)

JavaScript двоичные числа хранятся в формате высокой четкости.

Это означает, что отрицательное число является побитовым НЕ числа плюс 1:

Двоичное представлениеДесятичное значение
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

Преобразование десятичного в двоичный

Пример

function dec2bin(dec){
  return (dec >>> 0).toString(2);
}
Редактор кода »

Преобразование двоичного в десятичный

Пример

function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}
Редактор кода »