我最近发现了这段 JavaScript 代码:
Math.random() * 0x1000000 << 0
我知道第一部分只是生成一个介于 0 和 0x1000000 之间的随机数(== 16777216)。
但第二部分似乎很奇怪。执行位移 0 有什么意义?我不认为它会做任何事情。然而,经过进一步调查,我注意到移位 0 似乎截断了数字的小数部分。此外,它是右移还是左移,甚至是无符号右移都无关紧要。
> 10.12345 << 0
10
> 10.12345 >> 0
10
> 10.12345 >>> 0
10
我用 Firefox 和 Chrome 都测试过,行为是一样的。那么,这种观察的原因是什么?它只是 JavaScript 的细微差别,还是在其他语言中也存在?我以为我理解位移,但这让我很困惑。