如何表示二进制数的正负呢
通常采用的方法是在二进制数的前面加一位符号位,符号位为0表示这个数是正数,符号位位1表示这个数位负数,这种形式的数就称为原码。
为什么需要二进制补码
在做减法时,如果两个数时用原码表示的,则首先需要比较两数绝对值的大小,然后以绝对值大的一个数作为被减数、绝对值小的一个作为减数,求出差值,并以绝对值大的一个数的符号作为差值符号。不难看出这个操作过程比较麻烦,而且需要使用数值比较电路和减法运算电路。如果能用两数的补码相加代替上述的减法运算,那么计算过程就无需使用数值比较电路和减法运算电路了,从而能使运算器的电路结构大为简化。
那么补码是什么呢?
因为原码有正负之分,所以原码对应的补码也要分开二论:
对于有效数字(不包括符号位)位n位的二进制数N,它的补码
(N)comp表示方法为
即正数(当符号位为0时)的补码与原码相同,负数(符号位为1时)的补码等于2的n次方减去N。符号位保持不变。
又回到了原来的问题
为了避免两个原码原码做减法的时候使用到比较电路和减法运算电路,所以引入了补码的概念,使用两个原码的补码相加来代替相减,然后在求补码的过程中(针对负数,符号位为1)又遇到了减法,绕一圈回来还是有减法运算。怎么办呢?所以这就是为什么要引入反码的原因!
为什么需要二进制反码
反码是什么?
同样,对于有效数字(不包括符号位)位n位的二进制数N,它的反码(N)inv表示方法为
由上式可知,当N为负数时,将等式变形可得(N)inv + N = 2的n次方-1,而2的n次方-1是n位全为1的二进制数,所以只要将N中每一位的1改为0,0改为1就得到了N的反码(N)inv。
所以,在N为负数时,结合补码和反码的公式就可以得出:补码 = 反码+1。现在两原码相减就变成这样了:
原码a-原码b = 补码a+补码b = 反码a+1 + 反码b+1, 成功避免减法!
附
在计算机中,运算器中只有加法器,即是只能做加法!那乘法、除法怎么进行运算呢? 喔!还有减法呢?请看前文如何用反码避免减法。
言归正传,乘法 采用累加的方式,除法 采用累减的方式(用反码做加法代替减法)。