计算机中使用累加器(ACC:Accumulator)完成加法运算,但由于在计算机中实现减法器的造价高,所以同样使用累加器来完成减法运算。那怎么样将减法转换为加法呢?
补数
定义
补数是一种处理有符号数的方法,用于变换数字的符号,通过使用补数将减法中的“-”转换为“+”。
例如现在时钟上显示9点钟,想要变换成6点钟,可以逆时针旋转3圈,也可以顺时针旋转9圈。这样达到的效果是相同的。我们将方向定位正负,即-3与+9等价。而数学上称12为模写作(mod 12),而称+9是-3以12为模的补数记为
-3+9(mod 12)
-4+8(mod 12)
-5+7(mod 12)
所以+9是-3以12为模的补数,+8是-4以12为模的补数
|-5|+ 7 = 12 ,|负数|+补数 = 模 ,所以补数一定为正数
结论:(在模确定的情况下)
一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身来得到。
一个正数和一个负数互为补数时,两数的绝对值之和为模
正数的补数为其自身。
计算方式
计算机科学中,补数的最大应用点为,在处理加法和减法中,不会因为数字的正负使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补数来表示,因此只要有加法电路及补数电路即可完成各种有符号数的加法及减法,电路设计上相当方便。计算中会提到几个术语:
● 原码:数值本身
● 取反:0变1,1变0
● 补码:补数
● 符号位:最高位(最左边)表示符号位,其中1表示负,0表示正。
补数在计算机中被称为补码,计算机中用原码取反加一。例如-2的补码计算过程为
1010 --> (取反) 1101 -->(加一)1110 (符号位不变)
减法运算转换成加法运算
将负数用其补码来表示,从而将减法运算转换成加法运算,这样可以使用ACC完成运算。
7-2=7+(-2)=0111+1110 = 10101
左边第一位溢出、忽略, 得到结果为0101,由于符号位为0表示正数,补码为正数,原码也为正数,所以最终结果为0101.
2-7=2+(-7)=0010 + 1001 = 1101
其中符号位为1,表示为负数,补码为负数,原码🟰补码-1 再取反,即 1101–>1100(减一) --> 1011(取反),所以最终结果为1011.