原码-反码-补码

提前基础–机器数和真值

  • 机器数
    一个数在计算机的二进制表示形式,称作这个数的机器数。机器数带符号,在最高位存放符号,正数为 0,负数为 1。
  • 真值
    因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如符号数 10000011,其最高位 1 代表负数,其真正数值是 -3,而不是 131(10000011转换成十进制等于131)。所以,为了区别,将带有符号位的机器数对应的真正数值称为机器数的真值。

原码,反码,补码的基本概念和计算方法

原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。例如一字节的8位二进制:[+1]=0000 0001,[-1]=1000 0001。因为第一位是符号位,所以 8 位二进制的取值范围是 [1111 1111,0111 1111],即 [-127,127]。

补码

补码的表示方法是:正数的补码是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后加 1(即在反码的基础上加1)。
[+1]=[0000 0001]=[0000 0001]=[0000 0001]
[-1]=[1000 0001]=[1111 1110]=[1111 1111]

反码

反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1]=[0000 0001]=[0000 0001]
[-1]=[1000 0001]=[1111 1110]

为何要使用原码,反码和补码(待补充)

对于正数因为三种编码方式的结果都相同,所以不再讨论,而对于负数:
[-1]=[1000 0001]=[1111 1110]=[1111 1111]