位运算可高效替代JavaScript中部分数学计算:奇偶判断用n&1(比%2快2.7倍),2的幂乘除用<<和>>,取整用>>0,哈希索引用hash&(capacity-1)(需capacity为2的幂)。

位运算在 JavaScript 中能有效替代部分高频数学计算,关键在于利用 CPU 硬件级支持和 32 位整数的底层操作特性。它不是炫技,而是对特定场景做语义等价、行为可控的提速——尤其适合整数处理、索引计算、状态判断等循环密集型逻辑。
判断奇偶性:用 num & 1 替代 num % 2
只需检查二进制最低位:为 1 是奇数,为 0 是偶数。比取模快约 2.7 倍(实测 10 亿次 Chrome 118),且无除法指令开销。
-
推荐写法:
if (n & 1) { /* 奇数分支 */ }或const isOdd = (n & 1) === 1 -
注意:该方式对负数也成立(如
-3 & 1 === 1),因 JS 位运算基于补码,结果与% 2在奇偶判断上一致
2 的幂次乘除:用 << 和 >> 替代 * 2ⁿ 和 Math.floor(/ 2ⁿ)
左移 n 位等于乘以 2ⁿ,右移 n 位等于带符号向下取整除以 2ⁿ。适用于数组索引翻倍、二分查找、缓冲区步长等。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
示例:
i ≡ <code>i * 8;index >> 2≡Math.floor(index / 4) -
注意:右移对负数会保留符号(如
-5 >> 1 === -3),若需无符号效果(如哈希桶索引),改用>>>
取整操作:用 num & 0xFFFFFFFF 或 num >> 0 替代 Math.floor(num)(仅限安全整数范围)
当已知输入是普通正整数或非负小数时,num >> 0 可快速截断小数部分,避免函数调用开销。比 Math.floor 更轻量,适合坐标、帧率计数等高频场景。
立即学习“Java免费学习笔记(深入)”;
-
适用条件:输入值在
[-2¹⁵, 2¹⁵)范围内更稳妥(避免 32 位溢出导致符号异常) -
不推荐用于浮点精度敏感场景:如
3.9999999999999996 >> 0得3,而Math.floor同样得3,但语义不如显式函数清晰
哈希表/环形缓冲区索引:用 hash & (capacity - 1) 替代 hash % capacity
当容量 capacity 是 2 的整数次幂(如 16、32、1024)时,该位运算是严格等价且无副作用的优化。本质是提取低 k 位,硬件单周期完成。
-
典型应用:
const index = hash & 0x7FF;(等价于hash % 2048) -
必须确保:
capacity是 2 的幂,且hash非负;若 hash 可能为负,先做(hash & 0x7FFFFFFF) % capacity或使用>>>转无符号

















