(-3>>> 0).toString(2)vs(-3>> 0).toString(2)

时间:2016-05-03 18:13:54

标签: javascript binary bitwise-operators

有人可以详细解释为什么(-3>>0).toString(2)不会以二进制形式3返回11111111111111111111111111111101的两个补码,而(-3>>>0).toString(2)会返回呢?

两者都使用位移,但前者使用Sign-propagating right shift,后者使用Zero-fill right shift。我找到了这个解释:

  

-3>>> 0(右逻辑移位)将其参数强制转换为无符号整数,这就是为什么你得到32位二进制补码的原因   表示-3。

但我不知道该怎么做。如果可能,请提供详尽的答案。

1 个答案:

答案 0 :(得分:0)

似乎>>在按位运算超过绝对值时,只需使用相同的符号:

var absValue = Math.abs(value), 
    sign = value / absValue;
value = sign * (Math.abs(value) >> base);

因此,正/负值没有区别,它们是平等运作但保存了它们的标志。

而>>>仅通过值视为无符号但不实际转换它来运行全值(包括负值的补码形式)。