计算机系统基础2---值的表示1---原码、反码、补码、移码

文章目录

在计算机系统中,原码、补码、反码和移码是数值数据(尤其是有符号数)的四种关键编码方式,它们在二进制表示、运算规则和应用场景上各有特点。

1. 原码(Sign-Magnitude Representation)

定义

原码是最直观的数值表示方法,最高位为符号位(0表示正数,1表示负数),其余位表示数值的绝对值。

示例

以8位二进制为例:

+5 的原码:0000 0101

-5 的原码:1000 0101

特点

直观性:符号位直接表示正负,易于理解。

问题:

1、0的表示不唯一:存在+0(00000000)和-0(10000000)两种形式。

2、运算复杂:加减法需判断符号位,无法直接用加法实现减法(如5 - 3需转换为5 + (-3),但原码的加法规则复杂)。

应用场景

早期计算机系统或教学场景中用于理解符号位的概念。

2. 反码(Ones' Complement Representation)

定义

反码是对原码的改进,负数的反码是其原码按位取反(符号位不变)。正数的反码与原码相同。

示例

8位二进制:

+5 的反码:00000101(与原码相同)

-5 的反码:11111010(原码10000101取反)

特点

解决部分运算问题:反码的加法可通过"末位进位循环"实现减法(如5 - 3可转换为5 + (-3)的反码加法)。

问题:

1、0的表示仍不唯一:+0为00000000,-0为11111111。

2、高位溢出:运算时可能产生进位循环,需额外处理。

应用场景

早期计算机系统(如CDC系列)中用于简化减法运算。

3. 补码(Two's Complement Representation)

定义

补码是当前计算机系统中最常用的数值表示方法。负数的补码是其反码的末位加1(即"取反加1")。正数的补码与原码相同。

示例

8位二进制:

+5 的补码:00000101(与原码相同)

-5 的补码:11111011(反码11111010加1)

特点

统一加减法:通过补码,减法可完全转换为加法(如a - b = a + (-b)的补码),简化硬件设计。

0的表示唯一:0的补码为00000000,无-0的概念。

范围对称:n位补码可表示的范围为-2^ (n-1) 到 2^(n-1) -1(如8位补码范围为-128到127)。

溢出处理:运算结果超出范围时,高位自然丢弃(模运算特性)。

应用场景

现代计算机系统(如x86、ARM架构)中所有整数运算均使用补码。

4. 移码(Excess-K Representation)

定义

移码主要用于表示浮点数的阶码(Exponent),其值通过补码的符号位取反得到(即移码 = 补码 + 偏移量,偏移量通常为2^(n-1),n为阶码位数)。

示例

(8位移码,偏移量=128)

阶码真值0的移码:10000000(补码00000000 + 128)

阶码真值-1的移码:01111111(补码11111111 + 128,取低8位)

特点

便于比较:移码将阶码的真值范围映射到无符号数区间,可直接比较大小(如10000001(真值+1) > 10000000(真值0))。

无正负之分:移码本身不区分正负,仅通过数值大小表示阶码的真值。

与补码的关系:移码与补码仅符号位不同,其余位相同。

应用场景

IEEE 754浮点数标准中阶码的编码方式(如单精度浮点数的8位阶码使用移码表示)。

总结对比

编码方式 符号位 负数表示方法 0的表示 运算特点 典型应用
原码 最高位 绝对值直接表示 不唯一(+0/-0) 加减法需判断符号 早期教学
反码 最高位 原码按位取反 不唯一(+0/-0) 末位进位循环 早期计算机
补码 最高位 反码末位加1 唯一(000...000) 统一加减法 现代计算机
移码 无(通过补码转换) 补码 + 偏移量 无意义(仅表示阶码) 便于比较大小 浮点数阶码

表示范围

编码方式 8位表示范围 关键特性
原码 -127 ~ +127 直观,但存在 ±0 冗余,运算复杂。
反码 -127 ~ +127 解决部分运算问题,但仍存在 ±0 冗余。
补码 -128 ~ +127 消除 ±0 冗余,统一加减法,成为现代计算机标准。
移码 -128 ~ +127 用于浮点数阶码,符号位取反,便于比较大小。

编码间转换

原码 ↔ 反码

1、正数

原码 → 反码:数值部分不变,符号位保留。

示例:

+5(原码 00000101)→ 反码 00000101

2、负数

原码 → 反码:符号位保留,数值部分按位取反(0变1,1变0)。

示例:

-5(原码 10000101)→ 反码 11111010

反码 → 原码:符号位保留,数值部分按位取反。

示例:

反码 11111010 → 原码 10000101(即 -5)

反码 ↔ 补码

1、正数

反码 → 补码:数值部分不变,符号位保留。

示例:

+5(反码 00000101)→ 补码 00000101

2、负数

反码 → 补码:符号位保留,数值部分末位加1(可能产生进位)。

示例:

-5(反码 11111010)→ 补码 11111011(末位加1)

补码 → 反码:符号位保留,数值部分末位减1(若末位为0需连续借位)。

示例:

补码 11111011 → 反码 11111010(末位减1)

原码 ↔ 补码

1、正数

原码 ↔ 补码:数值部分和符号位均不变。

示例:

+5(原码 00000101)↔ 补码 00000101

2、负数

原码 → 补码:

符号位保留,数值部分按位取反(得到反码)。

反码的数值部分末位加1(得到补码)。

示例:

-5(原码 10000101)→ 反码 11111010 → 补码 11111011

补码 → 原码:

符号位保留,数值部分末位减1(得到反码)。

反码的数值部分按位取反(得到原码)。

示例:

补码 11111011 → 反码 11111010 → 原码 10000101(即 -5)

补码 ↔ 移码

补码 → 移码:符号位取反,其余位不变。

示例:

补码 11111011(-5)→ 移码 01111011(真值 -5 + 128 = 123)

移码 → 补码:符号位取反,其余位不变。

示例:

移码 01111011(真值 123)→ 补码 11111011(-5)

数学关系:

偏移量为128

移码值 = 补码值 + 偏移量

补码值 = 移码值 - 偏移量

相关推荐
计算机毕业编程指导师3 小时前
【计算机毕设选题】基于Hadoop+Spark的化妆品销售数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·课程设计·化妆品
计算机毕业编程指导师1 天前
【Python毕设选题推荐】基于Spark的宫颈癌变光谱特征数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·宫颈癌变
计算机毕业编程指导师2 天前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师2 天前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
计算机毕业编程指导师2 天前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
计算机毕业编程指导师2 天前
大数据毕设怎么做?基于Hadoop的多源社交媒体心理健康情感分析与可视化系统从零到一指导 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·计算机·数据分析·毕业设计·课程设计·媒体
计算机毕业编程指导师2 天前
Python大数据毕设:基于Hadoop的病毒式社交媒体趋势和参与度分析系统怎么做 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·社交媒体
计算机毕业编程指导师2 天前
【Python毕设选题推荐】基于Hadoop+Django的奥斯卡奖获奖数据可视化分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·毕业设计·课程设计·奥斯卡奖
计算机毕业编程指导师2 天前
计算机大数据毕设怎么选?基于Spark的个体肥胖健康风险评估的数据分析与可视化系统带你通关 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·肥胖风险
计算机毕业编程指导师2 天前
【计算机毕设选题推荐】基于Spark的多源影视数据整合质量评估与可视化分析系统全解析 源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·影视