我最近发现了这段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 的一个细微差别,还是其他语言中也会出现这种情况?我以为我理解了位移,但这让我感到困惑。
你是对的;它用于截断值。
原因>>
之所以有效,是因为它仅对 32 位整数进行操作,因此该值被截断。 (它也常用于此类情况,而不是Math.floor
因为按位运算符的运算符优先级较低,因此可以避免混乱的括号。)
由于它仅对 32 位整数进行操作,因此它也相当于带有0xffffffff
四舍五入后。所以:
0x110000000 // 4563402752
0x110000000 >> 0 // 268435456
0x010000000 // 268435456
但这不是预期行为的一部分,因为Math.random()
将返回 0 到 1 之间的值。
此外,它的作用与| 0
,这是比较常见的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)