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

JavaScript 中用位运算符判断奇偶数,核心是利用 数字二进制表示的最低位:偶数最低位为 0,奇数为 1。最高效写法是 n & 1,比取模 n % 2 === 0 更快且无负数陷阱。
为什么 n & 1 能判断奇偶?
所有整数在计算机中以二进制存储。例如:
- 6 的二进制是
110,6 & 1→110 & 001 = 000 = 0→ 偶数 - 7 的二进制是
111,7 & 1→111 & 001 = 001 = 1→ 奇数
因为 1 的二进制只有末位是 1,按位与(&)只保留 n 的最低位,结果非 0 即 1,直接反映奇偶性。
对比取模方式的问题
n % 2 === 0 看似直观,但有两点隐患:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 对负数行为不一致:如
-3 % 2在 JS 中得-1,需写成Math.abs(n) % 2 === 0或(n % 2 + 2) % 2 === 0才可靠 - 涉及除法运算,底层开销略高;而
&是纯位操作,CPU 级别更快
实际使用建议
直接用布尔上下文更简洁:
- 判断奇数:
if (n & 1) { /* 奇数逻辑 */ } - 判断偶数:
if (!(n & 1)) { /* 偶数逻辑 */ }或if ((n & 1) === 0) { ... } - 注意:仅适用于安全整数范围内的整数(
Number.isInteger(n)最好先校验,避免对小数误判)
扩展:批量处理场景更明显
在循环或数组过滤中,性能差异会放大。例如筛选偶数:
- 推荐:
arr.filter(n => !(n & 1)) - 不推荐:
arr.filter(n => n % 2 === 0)(尤其数据量大或含负数时)
现代 JS 引擎虽已优化取模,但位运算仍更底层、更稳定,且语义更贴近“看最低位”这一本质逻辑。

















