Введение в побитовые операторы в 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. Поэтому мы также можем соотнести операцию И с умножением, потому что оба дадут одинаковый ответ.
Икс | Y | X & Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
пример
10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101
----------------------------
10 и 13 00000000000000000000000000001000 = 8 (основание 10)
2. Побитовое ИЛИ
Это двоичный оператор, обозначаемый символом вертикальной черты «|», который выполняет операцию ИЛИ на последовательной паре соответствующих битов своих аргументов. Оператор «|» вернет 1, если один из битов равен 1, или оба равны 1, иначе он вернет 0. Битовое ИЛИ «|» отличается от логического ИЛИ «||», так как работает бит за битом.
Икс | Y | X | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
пример
10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101
----------------------------
10 | 13 00000000000000000000000000001111 = 15 (основание 10)
3. Побитовый XOR
Это двоичный оператор, обозначаемый символом каретки «^», который выполняет операцию XOR на последовательной паре соответствующих битов своих аргументов. Оператор «^» вернет 0, если оба бита одинаковы (т.е. оба равны 1 или оба равны 0), иначе он вернет 1.
Икс | Y | X Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
пример
10 (основание 10) = 00000000000000000000000000001010
13 (база 10) = 00000000000000000000000000001101
----------------------------
10 13 00000000000000000000000000000111 = 7 (основание 10)
4. Побитовое НЕ
Это унарный оператор, обозначаемый символом тильды «~», который выполняет операцию NOT над соответствующими битами своего аргумента. Оператор «~» инвертирует биты операнда, т. Е. Преобразует 0 в 1 или 1 в 0.
Икс | ~ X |
0 | 1 |
1 | 0 |
пример
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, такие как логические операторы и операторы сдвига, а также его операции. Вы также можете посмотреть следующие статьи, чтобы узнать больше
- Компиляторы JavaScript
- Обратный в JavaScript
- Для цикла в JavaScript
- Введение в JavaScript