(i>>> -distance)是如何工作的

时间:2012-03-01 08:43:33

标签: java bit-manipulation

这是rotateLeft在Long中的含义:

public static long rotateLeft(long i, int distance) {
   return (i << distance) | (i >>> -distance);
}

但是,我无法理解(i&gt;&gt;&gt; -distance)是如何工作的!有人可以告诉我怎么样!谢谢。

2 个答案:

答案 0 :(得分:7)

仅采用移位值的最低位。

这与

相同
return (i << (distance & 63)) | (i >>> (-distance & 63));

return (i << (distance & 63)) | (i >>> ((64-distance) & 63));

return (i << distance) | (i >>> (64-distance));

使用负数的一个原因是它无论何种类型都可以使用,因此您可以在将来安全地更改它。

e.g。

// This works regardless of whether `x` is `int` or `long` 
// and you can safely change the type in the future.
// 1 if negative, 0 if non-negative
x >>> -1;

// works for 32-bit but not 64-bit so if you change the type later,
// it could break without compiler error.
x >>> 31;

你可能会发现这个有趣的http://vanillajava.blogspot.com/2012/01/shifting-challenge.html

答案 1 :(得分:0)

>>>unsigned right shift operator

  

无符号右移运算符“&gt;&gt;&gt;”将零移动到最左边的位置。