我曾经使用>>操作员进行右移。现在我刚用>>>替换它并找到了相同的结果。所以我无法弄清楚这两者是否基本相同。
答案 0 :(得分:11)
>>
是算术(签名)右移,>>>
是逻辑(无符号)右移,如Java tutorial中所述。尝试使用负值,你会看到差异。
答案 1 :(得分:6)
第一个运算符对值进行符号扩展,移位符号位的副本;第二个总是在零上移动。
这样做的原因是为了进行位操作而模拟无符号整数,部分补偿了Java中缺少无符号整数类型。
答案 2 :(得分:3)
This explains it really well。在同一页面上还有一个简短的example。
但是对于一个真正的简短摘要:
<< signed left shift - shifts a bit pattern to the left
0 0 1 1 1 => 0 1 1 1 0
>> signed right shift - shifts a bit pattern to the right
0 0 1 1 1 => 0 0 0 1 1
>>> unsigned right shift - shifts a zero into the leftmost position
1 1 1 0 => 0 0 1 1
~ unary bitwise complement operator
A | Result
0 | 1
1 | 0
0 | 1
1 | 0
& bitwise and
A | B | Result
0 | 0 | 0
1 | 0 | 0
0 | 1 | 0
1 | 1 | 1
^ xor
A | B | Result
0 | 0 | 0
1 | 0 | 1
0 | 1 | 1
1 | 1 | 0
| inclusive or
A | B | Result
0 | 0 | 0
1 | 0 | 1
0 | 1 | 1
1 | 1 | 1