Java中的“ >>>”是什么意思?

我发现此代码可在此处找到SO中的重复项。但我不明白这条线是什么意思int mid = (low + high) >>> 1;

private static int findDuplicate(int[] array) {

int low = 0;

int high = array.length - 1;

while (low <= high) {

int mid = (low + high) >>> 1;

System.out.println(mid);

int midVal = array[mid];

if (midVal == mid)

low = mid + 1;

else

high = mid - 1;

}

return high;

}

回答:

>>>运算符是Java中无符号的右移位运算符。它有效地将操作数除以2右操作数的幂,或者仅2在此处。

>>和之间的差异>>>仅在移动负数时才会显示。如果>>运算符1是a

1,则运算符会将其移位到最高有效位,而无论如何都将>>>移位0

让我们求平均值12147483647Integer.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.

以上是 Java中的“ &gt;&gt;&gt;”是什么意思? 的全部内容, 来源链接: utcz.com/qa/405210.html

回到顶部