为什么Javascript中“ 1 << 32”等于1

时间:2019-08-26 14:37:31

标签: javascript

如果1是32位,则1 << 32等于0

如果1是64位,则1<< 324294967296

那么JS中1来自哪里?是不确定的行为吗?

https://jsfiddle.net/xn2hr7fa/1/

1 个答案:

答案 0 :(得分:5)

与许多语言一样,左移位运算符仅使用五个最低有效位(将移位距离视为32位int)。请参阅步骤7 here

因此:

1 << 32 === 1 << (32 & 0x1f),即1 << 0 === 1

1 << 33 === 1 << (33 & 0x1f),即1 << 1 === 2

1 << 34 === 1 << (34 & 0x1f),即1 << 2 === 4

以此类推。