计算机中原码、反码、补码、移码总结

一、基本概念

在计算机中,分为有符号数和无符号数,有符号整数通常用最高位表示符号位:

  • 0 表示正数
  • 1 表示负数 以下均以 n 位二进制为例(含 1 位符号位)。

二、原码(True Form)

定义

  • 最高位为符号位,其余位为数值的绝对值二进制

计算规则

  • 正数:符号位 0,数值位不变
  • 负数:符号位 1,数值位不变

特点

  1. 表示直观,符合人类阅读习惯
  2. 0 有两种表示:+0-0,取值范围为 $[-(2^{n-1}-1),\ 2^{n-1}-1]$
  3. 减法运算复杂,计算机不直接用原码做加减

示例(8 位)

  • +50000 0101
  • -51000 0101
  • +00000 0000
  • -01000 0000

三、反码(One’s Complement)

定义

原码的基础上,负数按位取反,正数不变。

计算规则

  • 正数:反码 = 原码
  • 负数:符号位不变,数值位逐位取反(0↔1)

特点

  1. 只是过渡编码,主要用于求补码
  2. 同样存在 +0-0 两种表示,取值范围为$[-(2^{n-1}-1),2^{n-1}-1]$

示例(8 位)

  • +50000 0101(与原码相同)
  • -51111 1010
  • +00000 0000
  • -01111 1111

四、补码(Two’s Complement)

定义

计算机实际存储和运算使用的编码。

计算规则

  • 正数:补码 = 原码 = 反码
  • 负数:补码 = 反码 + 1

特点

  1. 统一了 +0-0,只有一个 0000 0000,范围为$[-2^{n-1},2^{n-1}-1]$
  2. 减法可转为加法实现:A - B = A + (-B)补
  3. 是现代计算机有符号数的标准表示

示例(8 位)

  • +50000 0101
  • -51111 1011
  • 00000 0000

五、移码(Excess-K / Bias Code)

定义

也叫偏置码,常用于浮点数阶码表示。

计算规则

  • 移码 = 补码 符号位取反
  • 或:移码 = 真值 + 偏置值(常用偏置 2^(n-1),如 8 位偏置 128)

特点

  1. 编码值随真值增大而单调递增,便于比较大小
  2. 主要用于浮点数指数部分(如 IEEE 754)
  3. 0 的移码全 0 或固定形式

示例(8 位,偏置 128)

  • +51000 0101
  • -50111 1011

六、快速对比表(8 位有符号数)

编码 正数规则 负数规则 0 的表示 主要用途
原码 符号0,数值不变 符号1,数值不变 00000000 / 10000000 人类阅读
反码 同原码 数值位取反 00000000 / 11111111 求补码过渡
补码 同原码 反码+1 00000000 计算机存储运算
移码 补码符号位取反 补码符号位取反 10000000 浮点数阶码

七、总结

  1. 正数三码相同
  2. 负数:原码→反码(取反)→补码(+1)
  3. 移码只改补码符号位
  4. 计算机只用补码做加减,移码专用于浮点数阶码