n & 1 能判断奇偶性,因为其结果为1表示奇数、0表示偶数,原理是提取整数二进制最低位:偶数该位恒为0,奇数恒为1;该方法对正负整数均有效,但仅适用于安全整数范围。

用 JavaScript 的按位与运算符 & 判断奇偶性,核心是看整数的**二进制最低位(即第 0 位)**:如果为 1,是奇数;为 0,是偶数。而 n & 1 正好能提取出这个最低位的值——结果为 1 表示奇数,0 表示偶数。
为什么 n & 1 能判断奇偶?
所有整数在二进制中,最低位决定奇偶:
- 偶数(如
2 → 10₂、4 → 100₂、0 → 0₂)最低位都是0 - 奇数(如
1 → 1₂、3 → 11₂、−1 → ...11111111₂(补码))最低位都是1
& 是逐位比较:只有两个对应位都为 1,结果才为 1。而 1 的二进制只有最低位是 1(其余全 0),所以 n & 1 实际只保留了 n 的最低位,其余位全被“清零”。
实际写法和注意事项
- 直接用布尔上下文:
if (n & 1) { /* 奇数 */ } else { /* 偶数 */ }(因为1是真值,0是假值) - 显式判断:
n & 1 === 1(奇数),n & 1 === 0(偶数) - ✅ 对负数也有效(JavaScript 使用 32 位有符号整数补码表示,
−3 & 1仍得1) - ⚠️ 注意:仅适用于**安全整数范围内的整数**(
−2⁵³+1到2⁵³−1),超出后位运算会先转为 32 位有符号整数,可能失真
对比 n % 2 === 0 的区别
-
n % 2更直观、可读性强,且支持任意数字(包括小数、大整数) -
n & 1是位运算,理论上更快(尤其在底层或大量循环中),但现代 JS 引擎优化后差异极小 -
%对负数行为不同:−3 % 2 === −1(不是1),需写n % 2 !== 0或Math.abs(n % 2) === 1才可靠;而n & 1对正负奇数统一返回1
简单示例
console.log(4 & 1); // 0 → 偶数<br>console.log(7 & 1); // 1 → 奇数<br>console.log(-5 & 1); // 1 → 奇数<br>console.log(0 & 1); // 0 → 偶数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











