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)
这些不同的运营商做了什么?
答案 0 :(得分:13)
<<, >>
左右分别是Bit shift 。如果您将左操作数想象为二进制位序列,则您将向左或向右移位那些由右操作数指示的位数。
&, ^, |
这些分别是按位和, xor 和或。您可以将&
和|
视为&&
和||
的对应部分,除了它们将操作数视为位向量,并对每个操作数执行逻辑运算比特。没有^^
运算符,但此操作为“xor”或“exclusive or”。您可以将“a xor b”视为“a或b,但不是两者”。
答案 1 :(得分:5)
答案 2 :(得分: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