gpt4 book ai didi

javascript - 为什么移动 0 会 chop 小数?

转载 作者:行者123 更新时间:2023-12-03 03:44:33 32 4
gpt4 key购买 nike

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

Math.random() * 0x1000000 << 0

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

但是第二部分看起来很奇怪。执行位移 0 有何意义?我不认为它会做任何事情。然而,经过进一步调查,我注意到移位 0 似乎 chop 了数字的小数部分。此外,无论是右移、左移,还是无符号右移,都没有关系。

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

我使用 Firefox 和 Chrome 进行了测试,行为是相同的。那么,这种观察的原因是什么?这只是 JavaScript 的一个细微差别,还是其他语言中也会出现这种情况?我以为我理解了位移位,但这让我感到困惑。

最佳答案

你是对的;它用于 chop 值。

>> 起作用的原因是它仅对 32 位整数进行操作,因此该值被 chop 。 (在此类情况下,它也常用于代替 Math.floor,因为按位运算符的运算符优先级较低,因此您可以避免出现困惑的括号。)

由于它仅对 32 位整数进行操作,因此它也相当于四舍五入后带有 0xffffffff 的掩码。所以:

0x110000000      // 4563402752
0x110000000 >> 0 // 268435456
0x010000000 // 268435456

但这不是预期行为的一部分,因为 Math.random() 将返回 0 到 1 之间的值。

此外,它与 | 执行相同的操作。 0,更常见。

关于javascript - 为什么移动 0 会 chop 小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125421/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com