n & 1 能判断奇偶性是因为整数二进制最低位为0时是偶数、为1时是奇数,该运算仅保留最低位,结果为0或1;相比取模,它更快、对负数安全、类型转换更确定。

用位运算符判断奇偶性,最高效的方式是使用 &(按位与)操作符配合数字 1: n & 1。
为什么 n & 1 能判断奇偶?
整数在二进制中,最低位(bit 0)决定奇偶:
- 偶数的二进制末位一定是 0(如 2 → 10,4 → 100);
- 奇数的二进制末位一定是 1(如 3 → 11,5 → 101)。
n & 1 相当于只保留 n 的最低位,其余位全归零。结果只有两种可能:
- n & 1 === 0 → 偶数
- n & 1 === 1 → 奇数
和取模相比有什么优势?
- 更快:位运算是 CPU 级原语,无需除法或取余逻辑,执行周期更少;
-
更安全:对负数也适用(JS 中负数用补码表示,
-3 & 1得1,正确识别为奇数); -
无类型隐式转换风险:
%在非数字类型上可能返回NaN,而&会先 ToInt32,行为更确定(但仍建议确保输入为整数)。
实际写法示例
基础判断:
function isOdd(n) { return (n & 1) === 1; }
function isEven(n) { return (n & 1) === 0; }简洁布尔式(推荐):
if (n & 1) { /* n 是奇数 */ }
if (!(n & 1)) { /* n 是偶数 */ }注意:n & 1 本身返回 0 或 1,可直接用于条件判断(因为 0 是 falsy,非零是 truthy)。
注意事项
- 仅适用于 整数;对小数(如
3.7 & 1)会先被截断为3,结果可能不符合预期; - JS 中位运算符自动将操作数转为 32 位有符号整数(ToInt32),因此对超过
±2^31的大整数可能出错,此时应改用n % 2 !== 0; - 代码可读性略低于
n % 2 === 0,团队协作时建议加简短注释或封装成语义函数。


















