来自文档:
右移操作符(>>)将第一个操作数的指定位数右移。向右偏移的多余位将被丢弃。最左边位的拷贝从左边移进来。由于新的最左位与之前的最左位具有相同的值,因此符号位(最左位)不会改变。因此得名"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
,循环往复。