原码、反码、补码

  • 原码
1
2
3
#很直观的,以8位表示一个数
00000001 # 1
10000001 # -1
  • 反码
1
2
3
4
#正数数反码=原码
#负数反码=符号位(最高位)不变,其余各位取反
00000001 # 1
11111110 # -1
  • 补码
1
2
3
4
#正数补码=原码
#负数补码=符号位不变,其余各位取反,然后加1
00000001 # 1
11111111 # -1

原理

  • 为了使计算机只有加法运算,所以符号位也要参与运算,就出现了反码
  • 反码会导致+0,-0, 所以就有了补码,用原来-0的反码来表示-128

表示范围

  • 反码 : [-127, 127]
  • 补码 : [-128, 127]