我有问题:你知道2s补语,所以你可以得到一个正数的负数,反之并加一个。 e.g。
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
所以我认为我误解了一些事情
答案 0 :(得分:1)
将我以前的评论扩展到问题
8位中的 1111 1111 + 0000 0001
为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 - > - )
答案 1 :(得分:0)
1 0000 0000b
为256,而不是512.截断为8位,为0.
这是因为有两个补码,零为零。没有正面或负面的零点。
将其与一个补码或符号位进行比较,其中正零和负零是不同的值。