【发布时间】:2018-03-17 00:23:14
【问题描述】:
我最近发现了这段 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 的细微差别,还是在其他语言中也存在?我以为我理解位移,但这让我很困惑。
【问题讨论】:
-
在其他语言中,它大多不起作用。 Python、C#、VB.NET、Java、Ruby 都不允许它,其中……几乎所有其他东西。
-
它在 Perl 中确实有同样的效果。
标签: javascript numbers operators bitwise-operators bit-shift