integer.rotateleft和integer.rotateright是java中实现无符号循环移位的静态方法,分别等价于(i >> -distance)和(i >>> distance) | (i >>确保负数高位补0,避免符号扩展干扰。

Integer.rotateLeft 和 Integer.rotateRight 是 Java 中用于对 int 类型进行**无符号循环左移/右移**的静态方法,底层基于位运算实现,不丢失位,也不受符号位影响。
rotateLeft 的原理与实现
将一个 int 的二进制表示向左循环移动指定步数:左边移出的位会从右边补回。
- Java 源码等价实现为:
(i >> -distance) - 注意:
distance会被自动对 32 取模(因为 int 是 32 位),所以rotateLeft(x, 35)等价于rotateLeft(x, 3) -
>>>是无符号右移,确保高位补 0,避免负数因符号扩展干扰结果
rotateRight 的原理与实现
向右循环移位,右边移出的位从左边补回。
- 等价实现为:
(i >>> distance) | (i - 同样会对
distance对 32 取模,rotateRight(x, 40)→ 实际移 8 位 - 用
>>>而不是>>,保证负数高位补 0,保持循环语义一致
一个直观例子
以 0b1001_0000(十进制 144)为例,循环左移 4 位:
- 原值(8 位示意):
1001 0000 - 左移 4 位后循环补回:
0000 1001→ 即 9 - Java 中调用
Integer.rotateLeft(144, 4)返回9
为什么不用普通移位?
普通左移 会丢弃高位,右移 <code>>> 或 >>> 会补 0 或符号位,都不是“循环”。这两个方法封装了“移出 → 补入”的完整逻辑,适合哈希、加密、位图操作等场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











