Java位移操作含左移和无符号右移>>>,作用于整数二进制补码,高效用于底层计算;高位补符号位,实现向下取整除法;>>>高位恒补0,负数变正,常用于哈希。

Java 中的位移操作通过三个专用运算符完成:左移()、带符号右移(>>)和无符号右移(>>>)。它们直接作用于整数类型的二进制补码表示,不经过十进制转换,效率高且常用于底层计算、哈希算法或内存优化场景。
左移运算符
将操作数的二进制位整体向左移动指定数量,右侧空出位置补 0。数学上等价于乘以 2 的 n 次方(但仅在不溢出时成立)。
- 对 int 类型,实际移位位数为
count % 32;long 类型为count % 64 - 例如:
5 → 二进制 <code>101变成1010→ 十进制 10 733183670 等效于 <code>733183670 (因为 40 % 32 = 8)
带符号右移 >>:高位补符号位
向右移动后,左侧空位按原数符号位填充:正数补 0,负数补 1。结果等效于向下取整的除法(如 -7 >> 1 == -4),不是四舍五入或向零取整。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 适用于需保持数值符号的场景,比如分段提取有符号数据
-
-8 >> 2→ 补码11111000右移两位 →11111110→ 十进制 -2
无符号右移 >>>:高位一律补 0
无论正负,左侧空位全补 0。负数经此操作会变成很大的正数,因为它忽略了符号位含义,只做纯位移。
立即学习“Java免费学习笔记(深入)”;
- 常用于位掩码、哈希混合(如
HashMap.hash()中的h ^ (h >>> 16)) -
-1 >>> 10→ 全 32 个 1 的补码右移 10 位,高位补 0 → 得到0x3FFFFF(即 4194303) - 注意:
byte或short参与>>>前会先提升为int,再截断赋值可能出错(如short s = -1; s >>>= 10;结果为 -1)
使用注意事项
位移运算符只支持整数类型(byte、short、char、int、long),不支持 float、double 或 boolean。移位位数为负数或超过类型位宽时,Java 会自动取模处理,不会报错但结果可能不符合直觉。

















