n & 1 可极速判断整数奇偶性:结果为1是奇数,为0是偶数;原理是二进制最低位决定奇偶,1作掩码仅保留末位,无需除法、支持负数、效率远超%2。

直接用 n & 1 就能快速判断:结果等于 1 是奇数,等于 0 是偶数。它不走除法、不看符号、一步到位,比 % 2 更底层也更稳。
为什么 & 1 能准确判断奇偶
整数在内存里以二进制补码存储,最低位(LSB)直接决定奇偶性:
- 所有偶数的二进制末位一定是 0(比如 6 → 110₂,−4 → …1100₂)
- 所有奇数的二进制末位一定是 1(比如 9 → 1001₂,−7 → …1001₂)
-
n & 1相当于拿一个只有末位为 1 的掩码(0…001),把其他位全清零,只留下最低位
怎么写才安全又清晰
推荐显式比较,避免歧义和优先级陷阱:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
-
(n & 1) == 0→ 判断偶数(加括号!& 优先级低于 ==) -
(n & 1) == 1→ 判断奇数 - 别直接写
if (n & 1)当布尔用——语法合法,但容易让人误读为“非零即真”,可读性弱 - 对
Integer类型,先判空再调用:num == null ? false : (num & 1) == 0
跟 % 2 比,优势在哪
不只是“看起来快”,而是硬件执行层级的差异:
-
n % 2底层仍需模拟除法逻辑,对负数还可能返回 −1(如-3 % 2 == -1),条件判断易出错 -
n & 1是单周期 ALU 指令,无分支、无符号处理、无溢出风险 - 实测高频循环中,
& 1比% 2快 30%–50%,尤其在算法、图像处理等场景明显 - 对
int、long、short、byte和char都适用,负数也完全可靠
哪些情况不能用
位运算是整型专属,有明确边界:
- 不支持浮点数(
double/float)——编译报错,奇偶性本身也不定义在小数上 -
BigInteger不能直接& 1,得用testBit(0)或remainder(BigInteger.TWO).equals(BigInteger.ZERO) - 别误用右移(如
n >> 1)来判断奇偶——那是取一半,不是看末位
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










