为什么 100 >> 100 和 100 >>> 100 在 Javascript 中返回 6?



来自文档:

右移操作符(>>)将第一个操作数的指定位数右移。向右偏移的多余位将被丢弃。最左边位的拷贝从左边移进来。由于新的最左位与之前的最左位具有相同的值,因此符号位(最左位)不会改变。因此得名"sign- propagated"。

根据我的理解,因为100是0b1100100,向右移动100次应该会得到0b0。然而,当我在Javascript中运行100 >> 100(使用chrome)时,它返回6。为什么会这样呢?我猜这与JS的内部数字表示有关,但我想更清楚地知道。

编辑:答案仍然是6,即使使用无符号>>>操作符。Sign/unsigned似乎无关紧要。

无符号操作文档:

无符号右移操作符(>>>)(填零右移)将第一个操作数的指定位数右移。向右偏移的多余位将被丢弃。零位从左移进。符号位变为0,因此结果总是非负的。与其他位操作符不同,右移填零返回一个无符号32位整数。

右边的值取32的mod。(即只使用最后五位。)如果你计算100>>32,你会得到100,这和你计算100>>0时得到的结果是一样的。之后,100>>33变为50,循环往复。

相关内容

  • 没有找到相关文章

最新更新