Примеры поразрядных операций в 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, и т. д..
При этом старшие биты теряются, а на освободившиеся позиции записываются нули.
Поразрядный оператор сдвиг вправо с сохранением знака перемещает все биты своего первого операнда вправо на количество позиций, указанное во втором операнде. При этом теряются биты, которые были сдвинуты за правый край.
Знак результата сохраняется за счет того, что самый старший бит просто дублируется.
Если число положительное, то старшие биты дополняются нулями, а если отрицателен, то единицами.
Эта операция эквивалентна делению на два, если сдвиг выполняется на одну позицию, если на две – деление на четыре и т.д.
Важно помнить, что дробная часть отбрасывается.
Оператор сдвиг вправо с заполнением нулями аналогичен оператору сдвига вправо с сохранением знака за исключением того, что старшие разряды заполняются нулями всегда.
Разницу между работой операторов правого сдвига можно увидеть только на отрицательных числах.
Последние сообщения
127 полезных и бесплатных онлайн академий
23.04.2019
Ресурсы для objective-C программистов
21.03.2018