原码、反码、补码

原码

  • 原码、反码、补码是计算机中表示有符号整数的三种编码方式,核心目的是解决负数的表示问题,并让加减法统一用加法器实现。
  • 正数的原码、反码、补码完全一致。
    • 6的二进制为110,通常以8位二进制表示原码:00000110,反码:00000110,补码:00000110
  • 负数的原码:二进制左侧首位表示符号,0代表正,1代表负,其他位代表真值。
    • -6的二进制为-110,通常以8位二进制表示原码:10000110

原码缺陷

  • 1、对于0来说,有+0和-0之分,那么就有两种表达方式(00000000和10000000)
  • 2、减法不能直接用加法电路实现(需要单独处理符号)(计算繁琐)

反码

  • 规则:
    • 正数的反码与原码一致
    • 负数的反码:将负数的原码符号位不变,其他位取反(1变0,0变1)
      • 如:-6的原码:10000110,-6的反码:11111001
      • 负数的反码转原码:符号位不变,其他位取反

反码缺陷

  • 1、对于0来说,有+0和-0之分,那么就有两种表达方式(00000000和10000000)(尚未解决)
  • 2、运算时可能需要循环进位,不够完美

补码

  • 规则:
    • 正数的补码与原码一致
    • 负数的补码:
      • 1、负数的反码+1
        • -6反码:11111001,+1后:11111010
      • 2、负数的原码两边的1不变,中间取反
        • -6原码:10000110,中间取反后11111010

补码特点

  • 1、只有一个0:00000000(10000000表示-128)
  • 2、减法可统一为加法:A – B = A +(-B的补码)
    • 2 – 3 = 2 + -3 = 0010(2的补码) + 1101(-3的补码) =1111(补码)=1001(原码)= -1
  • 3、最高位仍表示符号(0正1负)