n & 1 能判断奇偶是因为整数以二进制补码存储,最低位为0是偶数、为1是奇数;该操作仅保留最低位,结果为0或1,无需除法,兼容正负数且比 % 2 更高效。

直接用 n & 1 就能判断:结果为 1 是奇数,为 0 是偶数。它不依赖除法,不关心正负,底层就是取二进制最低位,简单又可靠。
为什么 & 1 能判断奇偶
整数在计算机里用二进制补码存储,而奇偶性完全由最低位(LSB)决定:
- 所有偶数的二进制末位一定是 0(比如 6 → 110,−2 → …1110)
- 所有奇数的二进制末位一定是 1(比如 9 → 1001,−5 → …1011)
- n & 1 只保留最低位,其余全清零,所以输出非 0 即 1
怎么写才安全有效
关键不是“能不能用”,而是“怎么写不出错”:
- 正确写法:if (n & 1) 判断奇数,if ((n & 1) == 0) 判断偶数(括号不能少)
- 别写成
n & 1 == 1——因为 == 优先级高于 &,实际等价于n & (1 == 1),纯属侥幸 - 对
int、long、unsigned short等整型都适用;负数如 −7、−8 同样准确 - 不适用于浮点数、字符串或自定义类,它们不能直接和 1 做位与
和 % 2 比有啥区别
表面看都是“除以 2 看余数”,但底层逻辑不同:
- n % 2 是除法类指令,有符号处理开销;C++ 中负数结果依赖标准版本(C++11 起向零取整,−3 % 2 得 −1)
- n & 1 是单周期 ALU 指令,无分支、无符号判断、无流水线停顿
- 编译器在 -O2 下常把 % 2 自动优化为 & 1,但显式写 & 1 更明确意图,也避免误用
n % 2 == 1判负奇数出错
其他语言里也能用吗
只要支持整型位运算,基本通用:
- Python:
(n & 1) == 1或直接bool(n & 1) - Java/C#:语法一致,
n & 1返回 int,用于 if 条件没问题 - JavaScript:对小整数安全;大数需注意
BigInt要用n & 1n - 注意:Python 和 JS 中
&对 float 报错,必须先转 int










