如果1是32位,则1 << 32
等于0
。
如果1是64位,则1<< 32
是4294967296
。
那么JS中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
以此类推。