本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Javas >> versus >>> Operator?
你好
我知道>>或<>>运算符的目的是什么?
JDK源文件中的ex PriorityQueue类,
private void heapify() {
for (int i = (size >>> 1) - 1; i >= 0; i--)
siftDown(i, (E) queue[i]);
}
不要告诉我>>>的工作原理,而是为什么要使用它。
谢谢
使用位移运算符来提高速度是过时的信念,在现代编码中造成的危害大于弊端。 不要使用它,因为(size / 2)更容易阅读并且性能也很好。
"不要告诉我>>>是如何工作的,这就是我为什么使用它" ...如果您已经知道它是如何工作的,那么现在您应该为什么使用它...
>>运算符保留最左边的位,但>>>保留。
这意味着,如果将>>移为负数,它将保持为负,但是如果使用>>>,则不会。
因此,将>>用于数学运算,将>>>用于位基运算。
使用<>和>>>对表示位模式的整数类型进行操作。
不要使用它们来"加速"乘法和除法。可能它不会有任何区别,并且实际上可能会使您的代码变慢。
Java JIT编译器应该能够为简单的算术表达式生成机器代码,这对于当前正在运行的硬件是最佳的。
如果您使用巧妙的屏蔽和移位来实现算术,则有可能1)代码对于您正在运行的机器而言不是最佳的; 2)JIT优化器不会弄清楚您实际上是在做算术。 ..因此无法进行优化。最终结果将是较慢的代码。
+1表示使用移位运算符来提高性能不是一个好主意。
>>和>>>运算符之间的区别在于>>用于无符号移位。这意味着>>>>在>>保留该位的值时清除最左边的位(因为实际上该位表示负值)
例:
您的值FFFFFFFEh = -2(有符号),则:
-2 >> 1 = FFFFFFFF = -1 // >>保留最高位值;请注意,如果我们将FFFFFFFF视为无符号值,则会出现此错误
-2 >>> 1 = 7FFFFFFF // >>>清除最高位
因此,如果要使用无符号值进行操作,则应使用>>>而不是>>。