Примеры поразрядных операций в JavaScript: поразрядные И, ИЛИ, исключающее ИЛИ, побитовый сдвиг

Помощь проекту:
WMR: R288272666982
WMZ: Z293550531456
Яндекс.Деньги: 410011531129223

Блог: http://zametkinapolyah.ru/
Рубрика JavaScript: http://zametkinapolyah.ru/veb-programmirovanie/zametki-po-javascript
Паблик блога в ВК: https://vk.com/zametkinapolyah
Тематическая группа в ВК: https://vk.com/zametkijs

Поразрядное И (&)
Оператор & выполняет операцию «логическое И» над каждым битом своих операндов. Операция выполняется для соответствующих битов. Результат будет равен единице только в том случае, когда оба бита равны 1.
12 & 9 = 8;
12 (по основанию 10) = 00000000000000000000000000001100 (по основанию 2)
9 (по основанию 10) = 00000000000000000000000000001001
00000000000000000000000000001100
&
00000000000000000000000000001001
——————————————————
00000000000000000000000000001000

Поразрядное ИЛИ (|)
Оператор | выполняет операцию «логическое ИЛИ» для каждого соответствующего бита левого и правого операндов. Результат будет равен единице если хотя бы один бит равен единице.
12 | 9 = 13;
12 (по основанию 10) = 00000000000000000000000000001100 (по основанию 2)
9 (по основанию 10) = 00000000000000000000000000001001
00000000000000000000000000001100
|
00000000000000000000000000001001
——————————————————
00000000000000000000000000001101

Оператор ^ выполняет логическую операцию «исключающее ИЛИ» над каждым соответствующим битом обоих операндов. Исключающее ИЛИ даст в результате единицу только если один операнд равен единице, а второй нулю.
1^1 = 0; 1^0 =1;
12 ^ 9 = 5;
12 (по основанию 10) = 00000000000000000000000000001100 (по основанию 2)
9 (по основанию 10) = 00000000000000000000000000001001
00000000000000000000000000001100
^
00000000000000000000000000001001
——————————————————
00000000000000000000000000000101

Побитовое не (~) – это унарный оператор, выполняющий инверсию бит. Из-за особенностей работы интерпретатора JavaScript (представление чисел в виде 32-ух битного целого) эту операцию можно реализуется так: происходит смена знака и вычитается единица.
~12 = -13;
12 (по основанию 10) = 00000000000000000000000000001100 (по основанию 2)
~00000000000000000000000000001100 = ‭ 11111111111111111111111111110011 ‬

Побитовый оператор сдвига влево сдвигает все биты в первом операнде влево на количество позиций, указанное во втором операнде. Сдвиг влево на одну позицию эквивалентен умножению на 2, на две позиции умножению на 4, и т. д..
При этом старшие биты теряются, а на освободившиеся позиции записываются нули.

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

Оператор сдвиг вправо с заполнением нулями аналогичен оператору сдвига вправо с сохранением знака за исключением того, что старшие разряды заполняются нулями всегда.
Разницу между работой операторов правого сдвига можно увидеть только на отрицательных числах.

ПРИСОЕДИНЯЙТЕСЬ
Поделиться

Кирилл Антонов

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



Обсуждение закрыто.