javascript可用位运算高效判断奇偶性(n & 1)和符号((n | 0) >> 31),适用于整数高频计算,但对浮点数、超大数及-0需谨慎处理。

JavaScript 中可以用位运算快速判断奇偶性和正负号,原理简单、性能高效,尤其适合底层逻辑或高频计算场景。
用 & 运算符判断奇偶数
整数的二进制最低位(bit 0)决定奇偶:偶数为 0,奇数为 1。因此 n & 1 的结果直接反映奇偶性:
- n & 1 === 0 → n 是偶数(包括 0)
- n & 1 === 1 → n 是奇数
- 注意:该方法对负数也成立(JavaScript 使用补码表示,-3 & 1 仍得 1)
- 比
n % 2 === 0更快,且不依赖取余运算的符号规则
用符号位判断正负(带符号整数视角)
JavaScript 数值是 IEEE 754 双精度浮点数,没有原生“符号位”操作,但可通过 Math.sign() 或位运算技巧近似获取符号信息:
- 对整数,(n >> 31) & 1 可提取 32 位有符号整数的符号位(仅适用于 -2³¹ 到 2³¹−1 范围内的整数)
- 更通用安全的做法是:n 0 ? 1 : 0 或直接使用 Math.sign(n)
- 若强制用位运算,可先用
n | 0转为 32 位有符号整数,再右移 31 位得到符号位(-1 表示负,0 表示非负),例如:(n | 0) >> 31返回 -1 或 0
组合判断:同时获取奇偶与符号
可将多个位运算组合使用,例如判断“是否为负奇数”:
((n | 0) >> 31) === -1 && (n & 1) === 1- 或一步写成:
((n | 0) >> 31) & (n & 1)—— 注意这不直接等价,需按逻辑组合 - 实际中建议拆开写清楚,避免可读性下降和边界问题
注意事项与边界提醒
位运算在 JavaScript 中默认按 32 位有符号整数处理,涉及浮点数或超大数时会隐式转换,可能产生意外结果:
- 小数会被截断(
3.7 | 0 → 3),所以 只对整数可靠 - 大于 2³¹−1 或小于 -2³¹ 的数,位运算结果可能不符合预期
-
0和-0在位运算中表现一致(都为 0),但Math.sign(-0)返回 -0,需留意语义差异
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











