Ознайомлення з бітовими операторами в JavaScript

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

Побітовий оператор у JavaScript перетворює свої операнди у форму доповнення 2 у їх 32-бітній цілочисельній формі, підписаній. Отже, коли оператор працює над цілим числом, похідне значення є формою доповнення 2 цього цілого числа. Доповнення 2 цілого числа - це доповнення числа 1 (тобто порозрядне число не числа) плюс 1.

Для прикладу нижче - 32-розрядне представлення числа 7

00000000000000000000000000000111

Нижче наведено 1 'доповнення, тобто ~ 7

11111111111111111111111111111000

Нижче наведено форму доповнення 2, яка дорівнює -7

1111111111111111111111111111100100

Побітовий операторВикористанняЗначення
Побітові Іх і уПовертає 1 у кожному бітовому положенні, якщо обидва відповідні біти 1, інакше 0.
Побітові АБОх | уПоверне 1 у кожному бітовому положенні, якщо будь-який з відповідних бітів дорівнює 1, інакше 0.
Побітовий XORх уПовертається 0 у кожному бітовому положенні, якщо обидва відповідні біти або 1, або 0 в іншому випадку 1, коли біти відрізняються.
Побіто НЕ~ хПереверне біти операнда x від 1 до 0 і навпаки.
Зміна влівоx << yЗсуне біти ліворуч на двійкове число x на y біт, при цьому натискаючи 0 праворуч.
Знак, що поширює правий зсувx >> yПеренесе біти праворуч на двійкове число x на y біт, копіюючи крайні ліві біти вліво, щоб виконати 32 біти.
Зміна нуля заповнення вправох >>> уЗсуне біти праворуч на двійкове число x на y біт, натиснувши 0 на лівій частині.

Побітові логічні оператори в JavaScript

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

1. Побіто І

Це двійковий оператор, позначений символом ampersand "&", який виконує операцію AND на послідовній парі відповідних бітів своїх аргументів. Оператор "&" поверне 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) = 111111111111111111111111111111000

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

-8 >>> 3 00011111111111111111111111111111 = 536870911 (основа 10)

3. Побітовий знак, що розповсюджує правий зсув

Це двійковий оператор, позначений символом “>>”. Цей оператор змістить найправіші біти першого аргументу на своє право на значення другого рази аргументу. Біти, зміщені зліва, замінюються самим лівим бітом (тобто бітовим знаком) в крайній лівій частині для кожної операції зсуву.

Приклад: 8 >>> 3 врожайності 1

8 (база 10) = 00000000000000000000000000001000

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

8 >> 3 00000000000000000000000000000001 = 1 (база 10)

-8 (основа 10) = 111111111111111111111111111111000

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

-8 >> 3 11111111111111111111111111111111 = -1 (основа 10)

Висновок

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

До: 110011010100011101001000100000001110010010001

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

Після: 11101001000100000001110010010001

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

Оператор застосовується в кожному біті (для двійкового оператора це повинна бути пара бітів), звідси називаються побітовими операторами в JavaScript.

Практичне застосування бітового оператора - це бітові прапори, зв’язок через сокет / порти, стиснення, шифрування, машини з кінцевим станом, графіка тощо.

Рекомендовані статті

Це посібник щодо операторів побітових операцій у JavaScript. Тут ми обговорюємо вступ, типи побітових операторів у JavaScript, таких як логічні та оператори зсуву разом з його операціями. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Компілятори JavaScript
  2. Зворотний бік JavaScript
  3. Для циклу в JavaScript
  4. Вступ до JavaScript