-
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)
Что делают эти разные операторы?
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)Что делают эти разные операторы?
<<, >>
Бит сдвига влево и вправо соответственно. Если вы представляете левый операнд как двоичную последовательность бит, вы смещаете те, что слева или справа, на количество бит, указанное правым операндом.
&, ^, |
Это побитовые и, xor и или, соответственно. Вы можете думать о & и | в качестве эквивалентов && и ||, за исключением того, что они будут обрабатывать свои операнды как битовые векторы и выполнять логические операции над каждым из битов. Нет оператора ^^, но эта операция - "xor" или "эксклюзивная или. Вы можете думать о" xor b "как" a или b, но не оба".
Вот попытка сделать вещи простыми для самого новичка.
Предпосылки
Вы должны быть знакомы с системой двоичных номеров (цифры, состоящие из двух цифр). Если вы этого не сделаете, сначала проверьте эту ссылку: https://www.mathsisfun.com/binary-number-system.html. На всякий случай, когда предыдущая ссылка ломается, этот ответ может немного помочь: fooobar.com/info/3174/....
Действительно, чтобы выяснить, как работают эти операторы, вам нужно знать, какая последовательность бит находится за номерами, задействованными в операции. После этого вы сможете понять следующие вещи.
Напоминание
Десятичные цифры и их двоичные обозначения:
0 0 | 5 101
1 1 | 6 110
2 10 | 7 111
3 11 | 8 1000
4 100 | 9 1001
Что делают >>>, >> и << do?
Эти операторы сдвигают последовательность бит влево или вправо.
decimal | binary decimal | binary
---------|--------- ---------|---------
9 | 1001 2 | 10
>> 2 | >> 2 << 2 | << 2
= 2 | = 10 = 8 | = 1000
Что делают &, | и ^ do?
Эти операторы объединяют биты двух чисел для создания нового номера.
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