计算机中表示一个数可以使用三种方式,即原码、反码、补码。
对于8bit数,原码的表示方法是最高位为符号位,其余位为数据位,例如:
[+1]原码 = 0 0000001
[-1]原码 = 1 0000001
反码的表示方法是在原码基础上得到,对于正数,反码等于原码,对于负数,反码等于原码除符号位取反,即:
[+1]反码 = 0 0000001
[-1]反码 = 1 1111110
补码的表示方法是在反码基础上得到,对于正数,补码等于原码,对于负数,补码等于反码+1,即:
[+1]补码 = 0 0000001
[-1]补码 = 1 1111111
计算机中都是通过补码进行运算,且将减法转为加法(减去一个数等于加上一个负数),例如:
1 - 1 = 1 + (-1) = [0 0000001]补 + [1 1111111]补 = [0 0000000]补 = [0 0000000]原
举一个特殊例子:
(-1)+(-127) = [1 1111111]补 + [1 0000001]补 = [1 0000000]补 = -128
如果按照上面规则计算[1 0000000]补的原码,得到的是[0 0000000]原,这是不对的,所以在8进制补码中,-128没有对应的原码,将+0的原码反码补码来做为-128的原码补码反码。