为什么将0左移会截断小数部分?

13 浏览
0 Comments

为什么将0左移会截断小数部分?

最近我发现了这段 JavaScript 代码:

Math.random() * 0x1000000 << 0

我知道第一部分只是在生成一个在 0 和 0x1000000(== 16777216)之间的随机数。

但是第二部分看起来很奇怪。进行一个位移运算为什么会有意义呢?我认为它不会有任何效果。然而,进一步调查后,我注意到位移运算为 0 似乎截断了数字的小数部分。而且,无论是右移、左移,甚至是无符号右移都没有影响。

> 10.12345 << 0
10
> 10.12345 >> 0
10
> 10.12345 >>> 0
10

我在 Firefox 和 Chrome 上进行了测试,行为是一样的。那么,这个观察结果的原因是什么呢?这只是 JavaScript 的一个细微差别,还是其他语言也会出现这种情况呢?我本以为我理解位移运算,但是这让我感到困惑。

0