一、&
& | 如果相对应位都是1,则结果为1,否则为0 |
例子:
9 & 3
9 二进制:1001
3 二进制:0011
所以 9 & 3 = 0001
结果为 1
二、|
| | 如果相对应位都是0,则结果为0,否则为1 |
例子:
2 | 3
2 二进制:0010
3 二进制:0011
2 | 3 = 0011
结果为3
三、^
^ | 如果相对应位值相同,则结果为0,否则为1 |
例子:
4 ^ 9
4 二进制:0100
9 二进制:1001
4 ^ 9 = 1101
结果为13
四、<<
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 |
注意:实际操作按照32位二进制进行,如图
由图可知
2 << 2
2 二进制:0000 0000 0000 0000 0000 0000 0000 0010
左移两位:0000 0000 0000 0000 0000 0000 0000 1000
结果为 8
五、>>
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 |
>>为高位补,并且补完后进行减1 除符号位 取反 操作,如图
上图为负数右移运算方式
以 13 >> 2 为例(正数原来跟左移原理一样,只是方向改变)
13 二进制: 0000 0000 0000 0000 0000 0000 0000 1101
右移2位: 0000 0000 0000 0000 0000 0000 0000 0011
结果为 3
六、>>>
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
例子:
5 >>> 2
5 二进制:0000 0000 0000 0000 0000 0000 0000 0101
右移2位: 0000 0000 0000 0000 0000 0000 0000 0001 (左边补零)
结果为 0001 = 1
七、~
〜 | 按位补运算符翻转操作数的每一位,即0变成1,1变成0。 |
例子:
~5
5 二进制:0000 0000 0000 0000 0000 0000 0000 0101
翻转后: 1111 1111 1111 1111 1111 1111 1111 1010
除了符号位,其他-1后按位取反
-1操作: 1111 1111 1111 1111 1111 1111 1111 1001
按位取反:1000 0000 0000 0000 0000 0000 0000 0110
结果为 - 6
步骤:翻转》减1》取反(符号位不变,其他位反转)