所以我在操控台上玩轮班,结果让我很困惑。
输入:
a = -1
a >>> 100输出:
268435455我看了一下关于它的Mozilla参考页面,但是它没有提到大量转移时>>>的行为。我以为用零填充把所有的位都移到右边会导致零。
这是Firefox中的bug还是什么的?
发布于 2013-11-07 00:08:24
看来你最多只能移动31次。
来自您在帖子中链接的站点(MDN):
将二进制表示中的a向右移动b (< 32)位,丢弃移出的位,左移为零。
来自实际规范(第77页)
设shiftCount是掩蔽除最不重要的5位rnum之外的所有结果,即计算rnum & 0x1F。
实际发生的情况是,当你移动到100时,它会被(100 & 0x1F)或4移动。
-1 >>> 100 === -1 >>> 4
如果你要把它分成几个轮班,那么它会起作用的:
-1 >>> 25 >>> 25 >>> 25 >>> 25 === 0
发布于 2013-11-07 00:09:43
任何在位算子中的Number上的Number都会将其操作数转换为32位大端有符号数字。
这意味着,如果数字大于可以存储的32位,它将被截断。大端指的是从左到右读取数字时按自然顺序存储的数字,即先存储更多的有效数字,因此,如果数字存储在一个字节以上,其第一个字节就更有意义。
这意味着-1的二进制表示将是..。
11111111 11111111 11111111 11111111(这里是-1 in 二补。这是通过计算二进制数的值来执行的,然后翻转每一个位并添加一个。)
当你在100换班的时候,你会发现它是4,留给你的.
00001111 11111111 11111111 11111111正如您所看到的,高位不再是设置的,所以它不是负的,它实际上是268435455 (来自您的问题中的数字)。
https://stackoverflow.com/questions/19825435
复制相似问题