【计算机组成原理】原码 反码 补码 移码

简介: 一、原码、反码、补码、移码的概念1. 真值 2. 机器数1. 原码2. 反码 3. 补码4. 移码 二、原码、反码、补码、移码的转换 1. 原码转反码2. 原码转补码 3. 原码转移码 三、总结

一、原码、反码、补码、移码的概念

1. 真值

二进制数和十进制数一样有正负之分。书写时可以用"+"和"-"来表示数据的符号,这种书写格式称为真值。

例如:十进制的+3和-5,二进制的+011和-101都是真值。

2. 机器数

由于数据只有正、负两种符号,因此在计算机中很自然就采用二进制的0和1来表示数据的符号,由符号和数值一起编码表示的二进制数称为机器数或机器码。常用的机器数有原码、反码、补码和移码。

例如:(这里的机器数都是原码)1,0001第一位表示符号位,1表示负数,逗号将符号位和数值位区分开,逗号 后面的是数值位,0001是二进制,所以转换为十进制后,真值就是 -1;再比如 0,101表示的十进制数的真值是+5。

1. 原码

原码就是符号化的数值,其编码规则简单直观:正数符号位用0表示,负数符号位用1表示,数值位保持不变。

例如:
x=+0.1101,则[x]原=0.1101;x=+1101,则[x]原=01101
x= -0.1111,则[x]原=1.1111; x= -1111,则[x]原=11111

原码数据表示简单直观,只需将符号位加上二进制数的绝对值即可。但原码存在两个机器0,这会给数据运算带来麻烦。另外原码的加减法运算复杂,符号位不能直接参与运算。加法运算需要“同号求和,异号求差”,减法运算需要“一号求和,同好求差”,求差时还需要先比较大小,然后用大数减去小数,最后结果的符号选择也相对复杂。显然,利用原码作为机器数在实现加减法运算方面是不方便的,原码在计算机中目前仅仅用于表示浮点数的尾码。

2. 反码

反码又称1的补码,其符号位和原码相同,真值为正数时,反码和原码相同;真值为负数时,反码数值位为真值数值位取反。

例如:
x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101
x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

反码的符号位和原码相同,当真值为负数时,数值位需要逐位取反。同样反码也存在+0和-0两个0.反码的加减运算较原码略简单,其符号位可以直接参与运算,加法运算直接将反码相加即可,但最高位进位要从运算结果最低位相加(循环进位)。减法运算只需要将被减数的反码加上减数负数的反码即可,同样也要采用循环进位的运算方法。但尽管如此,现代计算机中并没有采用反码进行数据表示和运算,这是因为人们找到了更好的编码——补码。

3. 补码

计算机中的二进制数据都有字长的限制,数据最高位进位的位权值就是模数,运算结果超过模数的部分都会被自动舍弃,所以计算机二进制数据的运算属于典型的有模运算,非常适合采用补码进行表示和运算。

例如:
x=+0.0101,则[x]补=0.0101;
x= -0.0101,则[x]补=1.1011;
x= -0.0000,则[x]补=0.0000;
x= -1.0000,则[x]补=1.0000;

补码的表示相对原码更加复杂,但其只有唯一的0,符号位可以直接参与运算,运算时符号位的进位作为模会自动舍弃,其独特的表示方法使得减法运算可以转换成加法运算,大大方便了二进制的运算。目前计算机中普遍采用补码表示有符号整数。

4. 移码

移码只用于定点整数的表示,通常用于表示浮点数的阶码。其编码方式是直接将真值x加一个常数偏移量。

例如:
x=+1010110,则[x]移=11010110;
x= -1010110,则[x]移=00101010;

移码具有以下特点:
① 移码的符号位中0表示负数,1表示正数;
② 同一数值的移码和补码除符号位相反外,其他各位相同;
③ 移码中0的表示也唯一,具体表示为100000……。

二、原码、反码、补码、移码的转换

1. 原码转反码

当原码的真值为正数时,反码的机器数就等于原码的机器数
当原码的真值为负数时,反码的机器数等于原码的机器数取反(符号位不变)

2. 原码转补码

当原码的真值为正数时,补码的机器数就等于原码的机器数
当原码的真值为负数时,补码的机器数等于原码的机器数取反再加1(符号位不变)
简单来说,原码的反码加1就是补码

3. 原码转移码

当原码的真值为正数时,移码的机器数等于原码,但是符号位要改变
当原码的真值为负数时,移码的机器数等于原码机器数取反加1(符号位取反)
简单来说,原码的补码数值位不变,符号位取反就是移码

三、总结

① 原码、反码、补码、移码都是机器数的表示方法,其实转换为人类所理解的数(真值)都是一样的,但是人类的习惯性思维对反码、补码、移码理解比较困难,一般我们需要将它转换为原码再转换成十进制理解。
② 当真值为正数时,反码、补码都等于原码,移码数值位等于原码,符号位取反即可。
③ 原码、反码机器数表示的零有正负之分;补码、移码机器数表示的零只有一个(即正零和负零相等)。

目录
相关文章
|
存储 机器学习/深度学习 人工智能
AI仓库管理
AI仓库管理运用人工智能优化存储、订单处理、路径规划和库存管理,提高效率、准确性,降低成本。包括智能存储推荐、订单分配、拣选路径规划、图像识别、自然语言处理、预测分析、自动化操作和实时库存跟踪。此外,集成物联网、无人机、机器人和区块链技术,提升效率和安全性。AI仓库管理为商家带来智能化决策支持和自动化解决方案。
1078 1
|
Java C++ C语言
UE4/5动画蓝图中Additive Animations讲解
UE4/5动画蓝图中Additive Animations讲解
890 0
UE4/5动画蓝图中Additive Animations讲解
|
存储
计算机组成原理-复习大纲(期末版)一
本复习大纲基于白中英主编第六版计算机组成原理教材。
239 0
|
11月前
|
机器学习/深度学习 自然语言处理 分布式计算
大规模语言模型与生成模型:技术原理、架构与应用
本文深入探讨了大规模语言模型(LLMs)和生成模型的技术原理、经典架构及应用。介绍了LLMs的关键特点,如海量数据训练、深层架构和自监督学习,以及常见模型如GPT、BERT和T5。同时,文章详细解析了生成模型的工作原理,包括自回归模型、自编码器和GANs,并讨论了这些模型在自然语言生成、机器翻译、对话系统和数据增强等领域的应用。最后,文章展望了未来的发展趋势,如模型压缩、跨模态生成和多语言多任务学习。
1327 3
|
12月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
213 2
利用java8 的 CompletableFuture 优化 Flink 程序
|
7月前
|
人工智能 自然语言处理 数据挖掘
2025国内有哪些呼叫中心系统值得推荐?
在数字化浪潮推动下,呼叫中心系统已成为企业客户服务的核心枢纽。通过全面智能化、多渠道融合、大数据与AI驱动的决策支持及云化与安全性等技术优势,呼叫中心系统实现了降本增效和客户体验提升。2025年,随着人工智能和云计算的深度渗透,呼叫中心将迎来新一轮升级。推荐几款高效系统:合力亿捷、中国移动、华为云、阿里云和百度语音解决方案,涵盖电商、金融、政府等多个领域,助力企业优化服务流程,提升竞争力。
517 13
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
129317 31
通义灵码编程智能体上线,支持Qwen3模型
|
9月前
|
存储 NoSQL Java
流计算需要框架吗?SPL 可能是更好的选择
流数据源的动态无界特性使得传统数据库技术难以直接处理,而Heron、Samza、Storm、Spark、Flink等计算框架在流计算领域取得了先发优势。然而,这些框架往往侧重于访问能力,计算能力不足,尤其在高级计算如流批混算、复杂计算和高性能计算方面表现欠佳。esProc SPL作为基于JVM的轻量级开源计算类库,专注于提升流计算的计算能力,支持丰富的流数据访问、灵活的集成接口和高效的内外存存储格式,具备强大的高级计算功能,能够简化业务逻辑开发并适应多样的应用场景。SPL通过专业的计算语言和结构化数据处理能力,为流计算提供了更优的解决方案。
|
传感器 人工智能 自动驾驶
智能交通系统:自动驾驶技术的社会影响
【9月更文挑战第27天】随着科技发展,智能交通系统与自动驾驶技术正革新交通领域,从提高交通效率与安全性到优化资源分配,其影响深远。自动驾驶技术基于AI与传感器,历经五个等级演进,促进交通流畅的同时减少人为驾驶错误。然而,技术进步亦引发就业市场变化、数据隐私及道德责任等问题,城市规划需适应新技术,加建充电站等设施。尽管存在挑战,智能交通系统仍有望重塑城市面貌,提升出行体验,实现更高效、环保的城市交通体系。