左移运算符

JavaScript 中用左移运算符 实现“快速乘二”,本质是把数字的二进制表示整体向左移动一位,低位补 0。这等价于乘以 2 的整数次幂,但只对**非负整数**可靠,且要注意溢出和符号位问题。
左移一位就是乘以 2
比如 5 :5 的二进制是 <code>101,左移一位变成 1010(即十进制 10),结果就是 5 × 2 = 10。
同理:
12 → 241 → 8(相当于 ×2³)0 → 0
,不是 <code>。
只适用于安全整数范围内的非负整数
JavaScript 使用 32 位有符号整数进行位运算(即使原始值是 number 类型)。超出 [-2¹⁵, 2¹⁵−1](即 −32768 到 32767)或含小数/负数时,行为可能不符合预期:
3.5 → 6(先取整为 3,再左移)-5 → -10(看似正常,但底层按补码运算,负数易出错)10000000000 → 可能因溢出变负数(如 <code>2147483647 得 -2)
0 ~ 2¹⁵−1 内的整数,或明确知道输入可控的场景。比 Math.pow 或 *2 快吗?
现代 JS 引擎对 x * 2 早已做了深度优化,实际性能和 x 差别极小,甚至有时更慢(因为要类型转换 + 位运算)。除非在极端性能敏感、大量整数位运算的场景(如图形、加密、WebAssembly 辅助逻辑),否则没必要刻意替换。<br><ul>
<li>可读性上,<code>x * 2 更直观,维护成本更低
容易被误认为“移位逻辑”,而非“乘二意图”
实用建议
如果真要用左移模拟乘二:
- 确保操作数是整数:可用
Math.floor(x)或x | 0转换 - 限定范围:检查是否在
0 (即小于 2³⁰)内 - 避免混用:不要和浮点运算、BigInt 混用(
BigInt需用n ) - 注释说明:写
// ×2 via bit shift,避免后续开发者困惑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











