我的教科书为有符号整数的双补码方法提供了以下解释:
我们将讨论此方法,因为它适用于1字节值。在那里面 上下文,值0到127由最后7位表示, 将高位设置为0.到目前为止,这与 符号量法。此外,如果高位为1,则值为 负。不同之处在于确定其价值 负数。减去位模式 对于9位模式100000000的负数(256为 以二进制表示),和 结果就是价值的大小。
这些对我来说都没有任何意义。典型的处理器使用八位字节(8位字节)。从9位字节中减去8位字节意味着什么?
我对这个解释感到非常困惑,如果有人能够更清楚地解释这个概念,我会非常感激。
答案 0 :(得分:2)
基本上,为了有效计算,您希望以相同的方式执行相同的操作(加法,减法等),而不管符号如何。首先,考虑无符号字节的情况。
使用8位,您可以表示0-255之间的任何值。加法和减法的工作方式与通常相同(模256),一切都很好。
现在,想象一下当你在127时,递增1会给你-128。我们仍在计算256的模数,但前128个数字已经移动了256个。现在,我们来看看加法: 10 +( - 5)= 10 + 251(无符号)= 261 = 5(模255)。
一切都按预期工作。所以,在我们的新表示中,-128是127 + 1,这是01111111 + 1,即10000000.-1将是11111111.我希望我帮助过。
答案 1 :(得分:1)
您有1个字节(8位数字,每个数字为0或1)
通过查看第一个数字来实现2&#39的补充10010011
^ this one
如果它为0,则数字为正,您可以继续正常将二进制转换为十进制。
如果它是1,那么它是否定的。正常转换(bin(10010011) = 147
)和THEN减去256(147 - 256 = -109
),并且有2的补码。
答案 2 :(得分:0)
我对两个补充的记忆说:
"翻转位加一个"
事实上,以下数字为负数:
Before +=