>>"在java中是什么意思?-6ren"> >>"在java中是什么意思?-这个问题在这里已经有了答案: Difference between >>> and >> (9 个回答) Java >>> Operator [duplicate] (3 个回答) 关闭 9 年前。 -6ren">
gpt4 book ai didi

java - ">>>"在java中是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 21:06:51 27 4
gpt4 key购买 nike

我发现此代码在 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;
}

最佳答案

>>> 运算符是 unsigned right bit-shift operator in Java .它有效地将操作数除以 2 的右操作数的幂,或者这里只是 2

>>>>> 之间的区别只会在移动负数时显示出来。如果 11,则 > 运算符将 1 位移动到最高有效位,并且 >>>0 中移动。

更新:

让我们平均 12147483647 (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.

关于java - ">>>"在java中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com