我曾经使用 >> 运算符进行右移。现在我刚刚将其替换为 >>> 并找到了相同的结果。所以我无法弄清楚这两者是否基本相等。
问问题
2922 次
3 回答
11
>>
是算术(有符号)右移,>>>
是逻辑(无符号)右移,如Java 教程中所述。在负值上尝试它们,你会看到不同。
于 2012-07-07T13:35:56.143 回答
6
第一个运算符对值进行符号扩展,移入符号位的副本;第二个总是移到零。
这样做的原因是为了进行位运算而模拟无符号整数,部分弥补了 Java 中无符号整数类型的不足。
于 2012-07-07T13:36:32.297 回答
3
但对于一个真正的简短总结:
<< 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
于 2012-07-07T13:42:00.763 回答