原码(Sign-Magnitude)

概念

  • 原码是一种最简单的表示有符号数的方法。
  • 使用最高位(最左边的一位)表示符号:0表示正数,1表示负数。
  • 其余位表示数值的大小。

规则

  • 对于正数:原码的表示与其二进制值相同。
  • 对于负数:将其绝对值的二进制表示取原码,并将最高位设置为1(表示负数)。

示例

  • 8位原码表示:
    • +5:00000101
    • -5:10000101

反码(Ones' Complement)

概念

  • 反码是通过对原码的数值部分逐位取反(0变1,1变0)得到的。
  • 正数的反码和原码相同。
  • 负数的反码是其原码除符号位外所有位取反。

规则:

  • 对于正数,反码与原码相同。
  • 对于负数,反码是将原码中所有位(除了符号位)取反,即将每个二进制位从 0 改为 1,或者从 1 改为 0。

示例

  • 8位反码表示:
    • +5:00000101
    • -5:11111010

补码(Two's Complement)

概念

  • 补码是反码加1得到的。
  • 正数的补码和原码相同。
  • 负数的补码是其反码加1。

规则:

  • 对于正数,补码与原码相同。
  • 对于负数,补码是将反码加 1。

示例

  • 8位补码表示:
    • +5:00000101
    • -5:11111011(反码为11111010,加1得到11111011)

总结

  • 原码 :简单但有两个零。
  • 反码 :解决了一部分问题,但仍有两个零。
  • 补码 :最常用、最有效,只有一个零,简化了计算机的加减法运算。

计算机内部广泛使用补码表示有符号整数,因为它简化了硬件设计和运算处理。了解这些概念有助于理解计算机的底层运算机制和一些算法的实现原理。

1000 1000 原码 十进制 :-8

1111 0111 反码

1 1 1 1 1 0 0 0

1111 1000 我得出的补码

1111 1000 补码