Java有两个位移运算符用于右移操作:
>> shifts right, and is dependant on the sign bit for the sign of the result
>>> shifts right and shifts a zero into leftmost bits
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
这个问题看起来很简单,但是请问有人能解释为什么当bar的值为-128时,下面的代码会使foo的值变成-2:
byte foo = (byte)((bar & ((byte)-64)) >>> 6);
这个功能的目的是取一个8位字节,屏蔽掉左侧的2位,然后将它们移动到右侧的2位。例如:
initial = 0b10000000 (-128)
-64 = 0b11000000
initial & -64 = 0b10000000
0b10000000 >>> 6 = 0b00000010
实际上,结果是-2。
0b11111110
将1秒左移而不是零位