Что делают эти побитовые операторы JavaScript?
2688 просмотра
3 ответа
x <<= y (x = x << y)
x >>= y (x = x >> y)
x >>>= y (x = x >>> y)
x &= y (x = x & y)
x ^= y (x = x ^ y)
x |= y (x = x | y)
Что делают эти разные операторы?
Автор: DarkLightA Источник Размещён: 12.11.2019 09:46Ответы (3)
13 плюса
<<, >>
Сдвиг бит влево и вправо соответственно. Если вы представляете левый операнд как двоичную последовательность битов, вы сдвигаете их влево или вправо на количество бит, указанное правым операндом.
&, ^, |
Это побитовые и , xor , и или , соответственно. Вы можете думать &
и |
как коллег &&
и ||
, за исключением того, что они будут относиться к их операнды как битовые векторы, а также выполнять логические операции на каждом из битов. ^^
Оператора нет , но эта операция является «xor» или « exclusive or ». Вы можете думать о «a xor b» как «a или b, но не оба».
5 плюса
2 плюса
Вот попытка сделать вещи простыми для самого новичка.
Предпосылки
Вы должны быть знакомы с системой двоичных чисел (числа, состоящие из двух цифр). Если это не так, сначала проверьте эту ссылку: https://www.mathsisfun.com/binary-number-system.html . На случай, если предыдущая ссылка оборвется, этот ответ может немного помочь: https://stackoverflow.com/a/32155850/1636522 .
Действительно, чтобы выяснить, как работают эти операторы, вам необходимо знать, какая битовая последовательность находится за числами, участвующими в операции. После этого вы сможете понять следующие вещи.
напоминание
Десятичные цифры и их двоичные обозначения:
0 0 | 5 101
1 1 | 6 110
2 10 | 7 111
3 11 | 8 1000
4 100 | 9 1001
Что делать >>>
, >>
и <<
делать?
Эти операторы сдвигают битовую последовательность влево или вправо.
decimal | binary decimal | binary
---------|--------- ---------|---------
9 | 1001 2 | 10
>> 2 | >> 2 << 2 | << 2
= 2 | = 10 = 8 | = 1000
Что делать &
, |
и ^
делать?
Эти операторы объединяют биты двух чисел, чтобы создать новый номер.
decimal | binary decimal | binary decimal | binary
---------|-------- ---------|-------- ---------|--------
5 | 101 5 | 101 5 | 101
& 6 | & 110 | 6 | | 110 ^ 6 | ^ 110
= 4 | = 100 = 7 | = 111 = 3 | = 011
Как &
работает?
Для каждой пары битов: если хотя бы один из двух битов равен 0, результирующий бит равен 0. Если ни один из двух битов не равен 0, результирующий бит равен 1.
101 bit 3 | bit 2 | bit 1
& 110 -------|-------|-------
= 100 1 | 0 | 1
& | & | &
1 | 1 | 0
= | = | =
1 | 0 | 0
Как |
работает?
Для каждой пары битов: если хотя бы один из двух битов равен 1, результирующий бит равен 1. Если ни один из двух битов не равен 1, результирующий бит равен 0.
101 bit 3 | bit 2 | bit 1
| 110 -------|-------|-------
= 111 1 | 0 | 1
| | | | |
1 | 1 | 0
= | = | =
1 | 1 | 1
Как ^
работает?
Для каждой пары битов: если два бита различны, результирующий бит равен 1. Если два бита одинаковы, результирующий бит равен 0.
101 bit 3 | bit 2 | bit 1
^ 110 -------|-------|-------
= 011 1 | 0 | 1
^ | ^ | ^
1 | 1 | 0
= | = | =
0 | 1 | 1
Автор: leaf
Размещён: 19.08.2015 11:07
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- javascript Как автоматически изменить размер текстовой области с помощью Prototype?
- operators В чем разница между | и || или операторы?
- operators Что делает оператор запятой?
- operators Чем отличаются операторы сравнения PHP (== double equals) и тождества (=== triple equals)?
- operators Как получить десятичное значение при использовании оператора деления в Python?
- operators Что такое операторы побитового сдвига (bit-shift) и как они работают?
- operators В чем разница между '/' и '//' при использовании для деления?
- bit-manipulation Как вы устанавливаете, очищаете и переключаете один бит?
- bit-manipulation Наиболее распространенные побитовые операции C # над перечислениями
- bit-manipulation Как посчитать количество установленных бит в 32-битном целом числе?
- bit-manipulation Как работает замена переменных XOR?
- bit-manipulation Самый быстрый способ зафиксировать реальное (фиксированное / с плавающей запятой) значение?