计算机可以有三种编码方式表示一个数。对于正数因为三种编码方式的结果都相同
出于计算方便的原因需要有反码、补码的存在
原码
第一位表示符号, 其余位表示值
8位二进制
[+1]原 = 0000 0001
[-1]原 = 1000 0001
范围为:
[1111 1111 , 0111 1111] => [-127 , 127]
反码
- 正数的反码是其本身
- 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (反码加一)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
机器可以只有加法而没有减法
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原