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

Java 中的 int 类型是 32 位有符号整数,底层以补码形式存储。这决定了它的位操作既高效又具确定性——所有位运算都直接作用于这 32 个二进制位,不经过类型转换或浮点处理,因此常用于性能敏感或底层逻辑控制场景。
用左移和右移替代乘除 2 的幂次
左移 等价于乘以 $2^n$,右移 <code>>> n(有符号)等价于带符号整数除以 $2^n$(向零取整)。
注意:仅适用于非负数时结果与数学除法一致;负数右移会保留符号位,行为符合整数除法语义(如 -5 >> 1 得 -3)。
x → 相当于 <code>x * 8-
x >> 4→ 相当于x / 16(整除) - 若需无条件补零右移(如处理位掩码、解析协议字段),用
>>>
用按位与快速提取或清零特定位
& 是最常用的位掩码工具。比如判断某位是否为 1,或把某几位设为 0:
- 检查第 n 位(从 0 开始计数)是否为 1:
(x & (1 - 清零第 n 位:
x & ~(1 - 保留低 8 位(清高 24 位):
x & 0xFF - 判断偶数(最低位为 0):
(x & 1) == 0
用异或实现状态翻转与无临时变量交换
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
^ 具有自反性和交换律:a ^ a = 0,a ^ 0 = a,a ^ b ^ b = a。
- 翻转第 n 位:
x ^= (1 - 交换两个 int 变量(不推荐日常使用,但面试常考):
a ^= b; b ^= a; a ^= b;
原理:三步后
a变为原b,b变为原a,全程无额外空间。
注意移位运算的模行为和符号扩展细节
对 int 类型,移位位数实际取 n & 0x1F(即 n % 32),超出 31 的位数会被自动截断:
x 等价于 <code>x-
-1 >> 1得-1(符号位持续补 1) -
-1 >>> 1得0x7FFFFFFF(高位全补 0,变成极大正数)
这些特性在实现哈希算法、位图压缩、网络字节序解析或权限位管理时非常关键。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










