的>>>
運算符是unsigned right bit-shift operator in Java。它有效地將操作數除以2
以得到右操作數的權力,或者在這裏只是2
。
>>
與>>>
之間的差異只會在轉換負數時出現。 >>
運算符將1
位移入最高有效位,如果它是1
,並且>>>
將移位0
,無論如何。
UPDATE:
讓我們平均1
和2147483647
(Integer.MAX_VALUE
)。我們可以做很容易的數學:
(1 + 2147483647)/2 = 2147483648/2 = 1073741824
現在,隨着代碼(low + high)/2
,這些都是涉及到的位:
1: 00000000 00000000 00000000 00000001
+2147483647: 01111111 11111111 11111111 11111111
================================================
-2147483648: 10000000 00000000 00000000 00000000 // Overflow
/2
================================================
-1073741824: 11000000 00000000 00000000 00000000 // Signed divide, same as >> 1.
讓我們把 「轉移」 到>>>
:
1: 00000000 00000000 00000000 00000001
+2147483647: 01111111 11111111 11111111 11111111
================================================
-2147483648: 10000000 00000000 00000000 00000000 // Overflow
>>> 1
================================================
+1073741824: 01000000 00000000 00000000 00000000 // Unsigned shift right.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html – iamnotmaynard