【问题标题】:Difference between Bitwise Right Shift and Bitwise Right Shift with Zero in JavaScript? [duplicate]JavaScript 中按位右移和带零的按位右移之间的区别? [复制]
【发布时间】:2023-02-09 02:40:53
【问题描述】:

如果我这样做,谁能解释我 - (10>>>2) = 2 (10>>2) = 2

都一样那么有什么区别

【问题讨论】:

  • 理解这一点需要您理解有符号整数在计算机中是如何表示的。

标签: javascript


【解决方案1】:

来自 MDN:

>>>:

无符号右移 (>>>)(零填充右移)运算符将左侧操作数计算为无符号数,并将该数的二进制表示按位数移动,模 32,由右 -手操作数。向右移出的多余位被丢弃,零位从左边移入。符号位变为 0,因此结果始终为非负数。

(我的重点)

>>:

右移 (>>) 运算符返回由对第一个操作数(计算为二进制补码位串)的二进制表示向右执行符号扩展移位的结果表示的有符号数的位数,取模32,在第二个操作数中指定。向右移出的多余位被丢弃,最左边位的副本从左边移入。

(我的重点)

因此,差异与左侧操作数的负值有关。 >>>移入0s,>>移入符号位的副本:

console.log("Signed:");
console.log(16 >> 2);
console.log(-16 >> 2);
console.log("Unsigned:");
console.log(16 >>> 2);
console.log(-16 >>> 2);

有关two's complement integers 的维基百科文章中有关符号位的更多信息。

【讨论】:

  • 有一天当我退休到英国时,我会免费为你工作
  • @Pointy -哈哈嘿,如果你想让我在下次我们需要远程开发时通知你...
猜你喜欢
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多