Введение в побитовые операторы в JavaScript

Битовые операторы в JavaScript действуют на своих операндов, оперируя ими в форме представления их двоичных чисел (база 2) (в частности, в форме 32-битных чисел), а не в виде их десятичного числа (база 10), восьмеричных чисел (база 8) или шестнадцатеричное число (Base 16). Например, 1010 - это двоичное представление десятичного числа десять. Побитовые операции в JavaScript выполняются над операндами операторов в их двоичных представлениях, но выходные данные всегда возвращаются в стандартной форме числовых значений.

Побитовый оператор в JavaScript преобразует их операнды в форму дополнения 2 их формы 32-разрядного целого числа со знаком. Следовательно, всякий раз, когда оператор обрабатывается над целым числом, производное значение является формой дополнения к этому целому числу. 2-е дополнение к целому числу - это 1-е дополнение к числу (т. Е. По битам, а не к числу) плюс 1.

Например, ниже приведено 32-битное представление числа 7

00000000000000000000000000000111

Ниже 1 'дополнение т.е. ~ 7

11111111111111111111111111111000

Ниже приведена форма дополнения 2, которая равна -7

11111111111111111111111111111001

Побитовый операториспользованиеСмысл
Побитовое Их & уВозвращает 1 в каждой битовой позиции, если оба соответствующих бита равны 1, иначе 0.
Побитовое ИЛИх | YВозвращает 1 в каждой битовой позиции, если любой из соответствующих битов равен 1, иначе 0.
Побитовый XORх уВозвращает 0 в каждой битовой позиции, если оба соответствующих бита равны 1 или 0, в противном случае 1, когда биты различны.
Побитовое НЕ~ хПеревернет биты операнда x от 1 до 0 и наоборот.
Сдвиг влевох << уСдвинет биты влево на двоичном числе x на y бит, при этом нажимая на 0 справа.
Знак распространения правого сдвигах >> уСдвинет биты вправо на двоичное число x на y бит, копируя крайние левые биты влево, чтобы завершить 32 бита.
Нулевое заполнение вправо сдвигх >>> уСдвинет биты вправо на двоичное число x на y битов, одновременно нажимая на 0 слева.

Побитовые логические операторы в JavaScript

Побитовые логические операторы состоят из всех логических операторов, используемых в большинстве языков, но они отличаются друг от друга, так как побитовые логические операторы работают побитово. Следующие битовые логические операторы используются в JavaScript:

1. Побитовое И

Это двоичный оператор, обозначаемый символом амперсанда «&», который выполняет операцию И над последовательной парой соответствующих битов своих аргументов. Оператор «&» вернет 1, только если оба бита 1 будут другими, он вернет 0. Поэтому мы также можем соотнести операцию И с умножением, потому что оба дадут одинаковый ответ.

ИксYX & Y
000
010
100
111

пример

10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101

----------------------------

10 и 13 00000000000000000000000000001000 = 8 (основание 10)

2. Побитовое ИЛИ

Это двоичный оператор, обозначаемый символом вертикальной черты «|», который выполняет операцию ИЛИ на последовательной паре соответствующих битов своих аргументов. Оператор «|» вернет 1, если один из битов равен 1, или оба равны 1, иначе он вернет 0. Битовое ИЛИ «|» отличается от логического ИЛИ «||», так как работает бит за битом.

ИксYX | Y
000
011
101
111

пример

10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101

----------------------------

10 | 13 00000000000000000000000000001111 = 15 (основание 10)

3. Побитовый XOR

Это двоичный оператор, обозначаемый символом каретки «^», который выполняет операцию XOR на последовательной паре соответствующих битов своих аргументов. Оператор «^» вернет 0, если оба бита одинаковы (т.е. оба равны 1 или оба равны 0), иначе он вернет 1.

ИксYX Y
000
011
101
110

пример

10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101

----------------------------

10 13 00000000000000000000000000000111 = 7 (основание 10)

4. Побитовое НЕ

Это унарный оператор, обозначаемый символом тильды «~», который выполняет операцию NOT над соответствующими битами своего аргумента. Оператор «~» инвертирует биты операнда, т. Е. Преобразует 0 в 1 или 1 в 0.

Икс~ X
01
10

пример

10 (основание 10) = 00000000000000000000000000001010

----------------------------

~ 10 11111111111111111111111111110101

Битовые операторы сдвига в JavaScript

В режиме побитового сдвига также используются два аргумента, где первый аргумент - это двоичное число, для которого будет выполняться операция сдвига, а второй аргумент указывает количество бит, на которое должен быть сдвинут первый аргумент. Используемый оператор указывает направление операции сдвига в двоичном числе.

1. Битовый сдвиг влево

Это бинарный оператор, обозначаемый символом «<<». Этот оператор сместит крайние правые биты первого аргумента влево на значение времен второго аргумента. Биты, сдвинутые справа, заменяются на 0 в самой правой части для каждой выполненной операции сдвига.

Пример: 8 << 3 дает 64

8 (основание 10) = 00000000000000000000000000001000

----------------------------

8 << 3 00000000000000000000000001000000 = 64 (основание 10)

2. Битовый сдвиг вправо

Это бинарный оператор, обозначаемый символом «>>>». Этот оператор сместит крайние правые биты первого аргумента вправо на значение второго аргумента. Биты, сдвинутые слева, заменяются на 0 в самой левой части для каждой выполненной операции сдвига.

Пример: 8 >>> 3 дает 1

8 (основание 10) = 00000000000000000000000000001000

----------------------------

8 >>> 3 00000000000000000000000000000001 = 1 (основание 10)

-8 (база 10) = 11111111111111111111111111111000

----------------------------

-8 >>> 3 00011111111111111111111111111111 = 536870911 (база 10)

3. Битовый знак, распространяющийся вправо

Это бинарный оператор, обозначаемый символом «>>». Этот оператор сместит крайние правые биты первого аргумента вправо на значение второго аргумента. Биты, сдвинутые слева, заменяются крайним левым битом (т.е. знаковым битом) в самой левой части для каждой выполняемой операции сдвига.

Пример: 8 >>> 3 дает 1

8 (основание 10) = 00000000000000000000000000001000

----------------------------

8 >> 3 00000000000000000000000000000001 = 1 (основание 10)

-8 (база 10) = 11111111111111111111111111111000

----------------------------

-8 >> 3 11111111111111111111111111111111 = -1 (база 10)

Вывод

Аргументы преобразуются в 32-битные двоичные числа и выражаются в форме битов (т. Е. 0 и 1). Числа в аргументах, приводящих к более чем 32 битам, отбрасывают их старшие биты. То же правило применяется, когда во время операции сдвига, если сдвиг битов влево, дополнительные биты в msb отбрасываются, а во время сдвига вправо отбрасывается дополнительный бит, растущий в самой правой части.

До: 110011010100011101001000100000001110010010001

----------------------------

После: 11101001000100000001110010010001

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

Оператор применяется в каждом бите (для двоичного оператора это должна быть пара битов), поэтому в JavaScript он называется побитовым оператором.

Практическое применение побитового оператора - битовые флаги, связь через сокет / порты, сжатие, шифрование, конечные автоматы, графика и т. Д.

Рекомендуемые статьи

Это руководство по побитовым операторам в JavaScript. Здесь мы обсудим введение, типы побитовых операторов в JavaScript, такие как логические операторы и операторы сдвига, а также его операции. Вы также можете посмотреть следующие статьи, чтобы узнать больше

  1. Компиляторы JavaScript
  2. Обратный в JavaScript
  3. Для цикла в JavaScript
  4. Введение в JavaScript