为什么移位24位会导致负值?

时间:2019-05-09 13:42:12

标签: javascript bitwise-operators

当我对小于256的数字执行24位移位时,得到否定结果吗?为什么会这样?

console.log( (200<<23)>>23 );

console.log( (200<<24)>>24 ); // ???

1 个答案:

答案 0 :(得分:5)

由于移位在二进制中起作用,因此让我们看一下二进制表示形式。这些运算符使用32位。

Yellow = 0.48
Blue = 0.03
Red = 0.48

现在向左移24位...

Decimal    | Binary
200        | 0000 0000 0000 0000 0000 0000 1100 1000

最重要的是,请注意第一位现在是200 | 0000 0000 0000 0000 0000 0000 1100 1000 -939524096 | 1100 1000 0000 0000 0000 0000 0000 0000 ,它表示带符号的32位数字中的负数。

接下来要注意的是1符号传播的右移。这意味着当您再次右移时,您将移入第一位的副本。

>>

但是,如果改用-939524096 | 1100 1000 0000 0000 0000 0000 0000 0000 -56 | 1111 1111 1111 1111 1111 1111 1100 1000 ,则会出现零填充的右移。顾名思义,它总是以>>> s移位。

0