计算机中原码反码补码的理解

234 阅读1分钟

序言:计算机在存储数据的时候只有0和1,这两个数字称为二进制数,或者叫做位(bit)。计算机使用二进制数的原因是,它们可以用电子开关的两种状态来表示,即开(1)和关(0),(在程序开发中,枚举类型数据会充分利用这个原理)。这样,计算机就可以用电路来存储和处理数据了。

存储时大体分为有符号数和无符号数,有符号数也就是-1这种,无符号数就是1这种。

无符号数规则

  • 按照正常计算 写的什么就是什么

有符号数规则

  • 最高位是符号位:1(负数)0(正数)
  • 需要遵守原码 反码 补码的规则

原码 反码 补码规则

原码:最高位符号位,对其它的为进行本身绝对值即可。

反码:

  • 正数:反码和原码相同
  • 负数:符号位一定是1,其余位对原码取反。

补码:

  • 正数:补码和原码相同
  • 负数:符号位一定是1,反码的基础上+1

补码到原码:如果是正数,原码即补码,如果是负数,符号位不变,取反后末尾加1。

测试,下面举例我所说的都是一个字节,也就是8位。
# 如果是正数,那都是一样的。
1
# 原码 0 0 0 0 0 0 0 1
# 反码 0 0 0 0 0 0 0 1
# 补码 0 0 0 0 0 0 0 1

# 如果是负数。
-1
# 原码 1 0 0 0 0 0 0 1
# 反码 1 1 1 1 1 1 1 0
# 补码 1 1 1 1 1 1 1 1

-7
# 原码 1 0 0 0 0 1 1 1
# 反码 1 1 1 1 1 0 0 0
# 补码 1 1 1 1 1 0 0 1