小编典典
该>>>运算符是Java中无符号的右移位运算符。它有效地将操作数除以2右操作数的幂,或者仅2在此处。
>>和之间的差异>>>仅在移动负数时才会显示。如果>>运算符1是a
1,则运算符会将其移位到最高有效位,而无论如何都将>>>移位0。
更新:
让我们求平均值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.
2020-10-18