运营商>>之间有什么区别和运算符>>>在java?

时间:2012-07-07 13:34:51

标签: java bit-shift

我曾经使用>>操作员进行右移。现在我刚用>>>替换它并找到了相同的结果。所以我无法弄清楚这两者是否基本相同。

3 个答案:

答案 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