计算机中原码、反码、补码、移码总结
一、基本概念
在计算机中,分为有符号数和无符号数,有符号整数通常用最高位表示符号位:
0表示正数1表示负数 以下均以 n 位二进制为例(含 1 位符号位)。
二、原码(True Form)
定义
- 最高位为符号位,其余位为数值的绝对值二进制。
计算规则
- 正数:符号位
0,数值位不变 - 负数:符号位
1,数值位不变
特点
- 表示直观,符合人类阅读习惯
- 0 有两种表示:
+0和-0,取值范围为 $[-(2^{n-1}-1),\ 2^{n-1}-1]$ - 减法运算复杂,计算机不直接用原码做加减
示例(8 位)
+5→0000 0101-5→1000 0101+0→0000 0000-0→1000 0000
三、反码(One’s Complement)
定义
原码的基础上,负数按位取反,正数不变。
计算规则
- 正数:反码 = 原码
- 负数:符号位不变,数值位逐位取反(0↔1)
特点
- 只是过渡编码,主要用于求补码
- 同样存在
+0和-0两种表示,取值范围为$[-(2^{n-1}-1),2^{n-1}-1]$
示例(8 位)
+5→0000 0101(与原码相同)-5→1111 1010+0→0000 0000-0→1111 1111
四、补码(Two’s Complement)
定义
计算机实际存储和运算使用的编码。
计算规则
- 正数:补码 = 原码 = 反码
- 负数:补码 = 反码 + 1
特点
- 统一了
+0和-0,只有一个0000 0000,范围为$[-2^{n-1},2^{n-1}-1]$ - 减法可转为加法实现:
A - B = A + (-B)补 - 是现代计算机有符号数的标准表示
示例(8 位)
+5→0000 0101-5→1111 10110→0000 0000
五、移码(Excess-K / Bias Code)
定义
也叫偏置码,常用于浮点数阶码表示。
计算规则
- 移码 = 补码 符号位取反
- 或:移码 = 真值 + 偏置值(常用偏置
2^(n-1),如 8 位偏置 128)
特点
- 编码值随真值增大而单调递增,便于比较大小
- 主要用于浮点数指数部分(如 IEEE 754)
- 0 的移码全 0 或固定形式
示例(8 位,偏置 128)
+5→1000 0101-5→0111 1011
六、快速对比表(8 位有符号数)
| 编码 | 正数规则 | 负数规则 | 0 的表示 | 主要用途 |
|---|---|---|---|---|
| 原码 | 符号0,数值不变 | 符号1,数值不变 | 00000000 / 10000000 | 人类阅读 |
| 反码 | 同原码 | 数值位取反 | 00000000 / 11111111 | 求补码过渡 |
| 补码 | 同原码 | 反码+1 | 00000000 | 计算机存储运算 |
| 移码 | 补码符号位取反 | 补码符号位取反 | 10000000 | 浮点数阶码 |
七、总结
- 正数三码相同
- 负数:原码→反码(取反)→补码(+1)
- 移码只改补码符号位
- 计算机只用补码做加减,移码专用于浮点数阶码