3

-2的补码是 100000...01

-2的补码是 1000000...10

-2 >>> 1 

根据>>>定义左移 0

应该是这样的 01000......1,为什么变成了0111111..11

4

1 回答 1

10

为了产生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

这正是你得到的结果。

于 2016-02-05T01:04:00.217 回答