-2
的补码是 100000...01
-2
的补码是 1000000...10
-2 >>> 1
根据>>>
定义左移 0
应该是这样的 01000......1
,为什么变成了0111111..11
?
-2
的补码是 100000...01
-2
的补码是 1000000...10
-2 >>> 1
根据>>>
定义左移 0
应该是这样的 01000......1
,为什么变成了0111111..11
?
为了产生2
(即-2
的表示)的二进制补码表示,您从 的表示开始2
,翻转它的所有位,然后添加1
到结果中:
00000000000000000000000000000010 -- This is 2
11111111111111111111111111111101 -- This the inverse of 2
11111111111111111111111111111110 -- This is the inverse of 2, plus 1
-2
的二进制表示是11111111111111111111111111111110
( demo )。
在没有符号扩展的情况下将其向右移动一个会产生
01111111111111111111111111111111
这正是你得到的结果。