二进制减法分为两种:
1 .使用硬件减法器进行运算
2 .将减法转换为加法。
本论文论述第二种方法。
我们知道计算机有两种数值类型。
1 .有符号类型
2 .无符号型。
因为有符号型利用其二进制的最高有效位来存储正负标志,所以有符号型的最大值的绝对值比无符号型小。 由于有符号类型比无符号类型少1位数据位,所以大小当然会减半,但两种类型表示的数值的个数相同。 因为从二进制数来看,两种类型没有任何区别。
这里主要使用有符号类型,但无符号类型实际上可以通过扩展1位符号位来转换为有符号类型。
据了解,数学减法等价于加入相反数,计算机也利用这一特性进行减法运算。
这里提到两个概念。 原码,反码。
原始代码是数字的原始二进制代码。
所谓反转代码,是对除标志比特之外的所有比特逐比特进行反转运算而得到的二进制代码,例如原始代码为10001000的整数反转代码为11110111。
注:反码和补码只针对于负数,正数的反码和补码等于原码,即正数的原码、反码和补码一样。
让我们看看计算机如何进行减法运算:
000000001(1)-0000001 )1)=00000001 10000001
取所有数值的反码:
00000001 (正数反码保持不变(11111110 )负数反码() ) )。
要执行二进制加法:
=11111111 (结果也是反码) ) ) ) )。
结果也是反符号且是负数,所以要得到真正的结果需要反运算。 反符号的反运算与正运算算法相同。
10000000=-0
现在发生了问题。 为什么是-0呢? 因此,又提出了补数的概念。
提出补数,即反符号1,以便解决标记比特的问题,并且该标记比特也参与到计算中。
接下来,我们再补码一次:
00000001 (正数补数保持不变(11111111 )负数补数)=0000000 )最高进位在范围外放弃)=0
注:正数结果的补码等于原码,所以不需要反向运算了。
结果是正确的。 来做一些练习吧。
11 - 4=7
00001011-00000100=0000101110000100=000010111100=000000111=7
正确。
4 - 11=-7
0000100-00001011=000010010001011=000001001001110101=11111001=10000111=-7
正确。
那么,二进制数的减法到此为止。