1

我有问题:你知道 2s 补码,所以你可以得到一个正数的负数,然后加一个。例如

8 Bit
121 = 0111 1001
 1st= 1000 0110
  +   0000 0001
      ---------
      1000 0111 --> -121 

所以现在如果我们有 -0

零看起来像 8 位

0000 0000

所以负0应该看起来

 1111 1111 + 0000 0001
= 10000 0000

但那是 512

所以我认为我误解了一些东西

4

2 回答 2

1

扩展我之前对该问题的评论

1111 1111 + 0000 0001在 8 位中0000 0000,第 9 位丢失,因为它没有位置。

而且,是的,否定的补语是肯定的

-121 = 1000 0111
 1st = 0111 1000
   +   0000 0001
       ---------
       0111 1001 --> 121 

把它们想象成一个圆圈,在某一点有 0,每次加 1 到相反的点(8 位中的 128),此时符号切换并且绝对值开始减小,例如128 + 1 = -127:当您继续添加 1 时,值会回到 0 并完成循环。

所以给定一些位,你只有那么多位,没有更多,如果你想要对值进行签名,你实际上只有 x-1 位作为值,因为最高有效位用于符号(0 -> +; 1 -> -)

于 2014-05-19T22:25:50.577 回答
0

1 0000 0000b是 256,而不是 512。截断为 8 位,它是 0。

这是因为对于二进制补码,零就是零。没有正零或负零。

将此与一个补码或符号位进行比较,其中正零和负零是不同的值。

于 2014-05-19T21:58:16.507 回答