我将此代码用于密码学家庭作业,但无法理解第 59 行
感谢帮手。
它是一样的;int
一个值左移 11 位。
底部 21 位向上移动 11,而顶部 11 位向下移动 21。
这是散列中使用的一种常见模式,因为它可以快速重新排列数字的位而不会丢失随机性。
返回通过将指定 int 值的二进制补码表示向右旋转指定位数获得的值。(位移出右手,或低位,左侧重新进入,或高位。)
请注意,负距离的右旋转等效于左旋转:rotateRight(val, -distance) == rotateLeft(val, distance)。另请注意,旋转 32 的任意倍数是无操作的,因此可以忽略旋转距离的最后五位以外的所有位,即使距离为负:rotateRight(val, distance) == rotateRight(val, distance & 0x1F)。
返回: 通过将指定 int 值的二进制补码表示右移指定位数获得的值。
public static int rotateRight(int i, int distance) {
return (i >>> distance) | (i << -distance);
}