5

我曾经使用 >> 运算符进行右移。现在我刚刚将其替换为 >>> 并找到了相同的结果。所以我无法弄清楚这两者是否基本相等。

4

3 回答 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 回答