我有问题:你知道 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
所以我认为我误解了一些东西
我有问题:你知道 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
所以我认为我误解了一些东西
扩展我之前对该问题的评论
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 -> -)
1 0000 0000b是 256,而不是 512。截断为 8 位,它是 0。
这是因为对于二进制补码,零就是零。没有正零或负零。
将此与一个补码或符号位进行比较,其中正零和负零是不同的值。