Java中int是32位有符号补码整数,支持高效位操作:左移<<n等价于乘2^n,右移>>n为带符号除法,>>>为无符号右移;&用于位掩码,^可翻转位或交换变量;移位位数对32取模。

Java 中的 int 类型是 32 位有符号整数,底层以补码形式存储。这决定了它的位操作既高效又具确定性——所有位运算都直接作用于这 32 个二进制位,不经过类型转换或浮点处理,因此常用于性能敏感或底层逻辑控制场景。
用左移和右移替代乘除 2 的幂次
左移 << n 等价于乘以 $2^n$,右移 >> n(有符号)等价于带符号整数除以 $2^n$(向零取整)。
注意:仅适用于非负数时结果与数学除法一致;负数右移会保留符号位,行为符合整数除法语义(如 -5 >> 1 得 -3)。
-
x << 3→ 相当于x * 8 -
x >> 4→ 相当于x / 16(整除) - 若需无条件补零右移(如处理位掩码、解析协议字段),用
>>>
用按位与快速提取或清零特定位
& 是最常用的位掩码工具。比如判断某位是否为 1,或把某几位设为 0:
立即学习“Java免费学习笔记(深入)”;
- 检查第 n 位(从 0 开始计数)是否为 1:
(x & (1 << n)) != 0 - 清零第 n 位:
x & ~(1 << n) - 保留低 8 位(清高 24 位):
x & 0xFF - 判断偶数(最低位为 0):
(x & 1) == 0
用异或实现状态翻转与无临时变量交换
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
^ 具有自反性和交换律:a ^ a = 0,a ^ 0 = a,a ^ b ^ b = a。
- 翻转第 n 位:
x ^= (1 << n) - 交换两个 int 变量(不推荐日常使用,但面试常考):
a ^= b; b ^= a; a ^= b;
原理:三步后
a变为原b,b变为原a,全程无额外空间。
注意移位运算的模行为和符号扩展细节
对 int 类型,移位位数实际取 n & 0x1F(即 n % 32),超出 31 的位数会被自动截断:
-
x << 35等价于x << 3 -
-1 >> 1得-1(符号位持续补 1) -
-1 >>> 1得0x7FFFFFFF(高位全补 0,变成极大正数)
这些特性在实现哈希算法、位图压缩、网络字节序解析或权限位管理时非常关键。

















