我阅读了wiki的文章和许多其他的文章。维基百科中的定义是:作为一个数关于2N的补的定义性质是这个数与原数的和是2N。";使用二补数表示计算原始值的公式是"二补数系统在二进制数表示中编码正数和负数"。每个位的权值都是2的幂次,除了最高有效位,它的权值是对应的2的幂次的负数。">
例如,对于一个数字p=-3,使用最多3位的二进制,我们用1000-011=101来计算这两个的补码表示,这是p的两个补码表示,-1x2^2+0x2^1+1x2^0=-3是p的原始值。我只是不知道为什么我们可以通过将公式应用于这两个的补码表示来得到原始值?有任何推理或证明过程吗?或者它只是另一个定义和赋值规则,使得我们使用公式将每个原始值赋给对应的两个补全表示。
2的补码表示与标准的2进制表示相同,只是高位为负其正常值。例如,8位双补码的值为
-128 64 32 16 8 4 2 1
给定10001001,它的值是-128 + 8 + 1 = -117
回答你后面的问题。"两个互补"有多种定义,它们都是等价的,所以我不太确定你认为哪一个是"正式的"。一。
为简单起见,我将假设一台8位计算机,这样数字就很小了。
请注意,计算机上的ADD指令并不真正执行加法。它执行加法,取256的mod。如果算240 + 27,得到11,你一点也不会惊讶。这是电脑上的加法。
但请注意,mod 256, 240和-16是相同的数字。因此,计算机不知道你是在将240和27相加,还是-16和27相加,在这两种情况下,你得到的答案都是一样的,11。
当处理无符号数时,你告诉计算机将8位作为0到255之间的数字。在处理有符号数时,是你,而不是计算机,把大于128的数字当作比128小256来处理。但是电脑并不在乎。
请注意,适用于ADD的完全相同的事情也适用于SUB和MUL。它对除法不起作用
我希望这能澄清发生了什么。没有魔法。