计算机中CPU内运算器应该是用ACC来完成加减法运算的。但是Accumulator怎么完成减法运算呢?唐朔飞的教材中这样描述了补码的诞生。
为了用ACC计算加减法,那么对真值进行了分类,用前加0/1区别正负,形成了原码。为了完成减法运算产生了补码+反码。移位是为了区别大小。
[+0]原=0,0
[-0]原=2^n-0=2^n=1,000000,n个0
[+0]反=0,0
[-0]反=2^(n+1)-1+0=2^(n+1)-1=1,00000```0-0```000001=11```11111,n+1个1
删掉了一些原来写的,现在看来当时的理解还有误差。
补码是为了得到负数而设置的,利用的是mod 可以产生的负数与正数相等。所以只要有补码的存在,必须满足有mod 2^n+1才可以。这样的话,-0的补码等于+0的补码也就解释得通了,是因为满足mod的规则,所以在-0的补码=(1),00000的时候1产生了溢出,满足mod 2^n+1自动消去了,然后才在最后的-2^n定义里补充了这一个数,从而使得数有对应关系。
其实唐的教材在反码的地方有一个令人疑惑的地方,教材中说反码中有mod 2-2^-n存在,可以这样理解。但实际上是不存在的,因为如果存在,那么就是会使得-0的反码溢出,导致-0的反码和+0的反码相等,这和定义不符,反码应该是和原码定义对应的。整数部分也一样。当然由于现代计算机都是用补码进行的计算,所以,基本都有mod规则存在。