我知道无符号,两个补码,一个补码和符号幅度,以及它们之间的区别,但我很好奇的是:
答案 0 :(得分:32)
当有人通过从1
中减去0
并让滚动器实际上使得签名算术变得更简单而意识到“变为负数”时,会出现两个补码,因为不需要进行特殊检查来检查是否数字是否定的。其他解决方案会在-1
和0
之间产生不连续性。两个补码的唯一奇怪之处在于,在你的范围内你得到的负数比正数要多一个。但是,其他解决方案会为您提供奇怪的内容,例如+0
和-0
。
根据维基百科的说法,这个名字本身来自于数学,并且基于在数量有限的地方使减法更简单的方法。该系统实际上是一个“基数补充”,由于二进制是基数2,这就变成了“二进制补码”。事实证明,“一个补码”是以“基数补偿减少”命名的,即基数减一。如果你看这个十进制,名字背后的含义更有意义。
答案 1 :(得分:8)
你可以在其他基地做同样的事情。对于十进制,你将有9的补码,其中每个数字X被9-X替换,而数字的10的补码是9的补码加1。然后,您可以通过添加10的补码来减去,假定数字是固定的。
一个例子 - 在4位数系统中,给定减法
0846
-0573
=0273
首先找到573的9的补码,即9-0 9-5 9-7 9-3或9426
573的10的补充是9426 + 1,或9427
现在添加10的补码并扔掉任何带有4位数字的东西
0846
+9427 .. 10's complement of 573
= 10273 .. toss the 'overflow' digit
= 0273 .. same answer
显然这是一个简单的例子。但这个比喻带来了。有趣的是,4位10的补码中最负值? 5000!
至于词源学,我推测术语1的补语是一个补语,意思是几何形状的互补角是90度减去角度 - 也就是说,当你从减去给定的角度时,它是剩下的部分。一些标准值。不确定“2”是如何补充的 但是有道理。
答案 2 :(得分:0)
在十进制编号系统中,基数 十:
在二进制编号系统中,基数 2 :