这是rotateLeft在Long中的含义:
public static long rotateLeft(long i, int distance) {
return (i << distance) | (i >>> -distance);
}
但是,我无法理解(i&gt;&gt;&gt; -distance)是如何工作的!有人可以告诉我怎么样!谢谢。
答案 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;”将零移动到最左边的位置。