【发布时间】:2023-02-09 02:40:53
【问题描述】:
如果我这样做,谁能解释我 - (10>>>2) = 2 (10>>2) = 2
都一样那么有什么区别
【问题讨论】:
-
理解这一点需要您理解有符号整数在计算机中是如何表示的。
标签: javascript
如果我这样做,谁能解释我 - (10>>>2) = 2 (10>>2) = 2
都一样那么有什么区别
【问题讨论】:
标签: javascript
来自 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 的维基百科文章中有关符号位的更多信息。
【讨论】: