尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
原码反码补码全面解析
原码、反码、补码详解1. 基本概念与定义在计算机中数值以二进制形式存储。为了表示有符号数正数和负数发展出了原码、反码和补码三种编码方式。现代计算机系统普遍采用补码作为整数存储和运算的标准。1.1 机器数与真值真值带符号的十进制数本身如5、-3。机器数真值在计算机中的二进制表示形式。其最高位最左边为符号位0表示正1表示负其余位为数值位。2. 三种编码方式详解2.1 原码 (Sign-Magnitude)原码是最直观的表示方法符号位加上绝对值的二进制形式。定义最高位为符号位其余位表示数值的绝对值。表示范围对于n位二进制数范围为[-(2^(n-1)-1), (2^(n-1)-1)]。例如8位原码的范围是[-127, 127]。特点直观符合人类思维。存在0(00000000) 和-0(10000000) 两种零的表示造成歧义和资源浪费。加减法运算复杂需要判断符号位硬件电路设计繁琐。示例8位原码表示十进制真值原码二进制50000 0101-51000 010100000 0000-01000 00002.2 反码 (Ones‘ Complement)反码是为了解决原码运算问题而引入的过渡方案正数的反码是其本身负数的反码是其原码符号位不变数值位按位取反。定义正数反码 原码。负数符号位不变数值位按位取反0变11变0。表示范围与n位原码相同[-(2^(n-1)-1), (2^(n-1)-1)]。特点同样存在0(00000000) 和-0(11111111) 的问题。减法可以转换为加法但运算后可能产生循环进位需要额外处理即“循环进位”加回到最低位硬件实现仍不完美。示例8位反码表示十进制真值原码反码50000 01010000 0101-51000 01011111 10102.3 补码 (Two‘s Complement)补码是现代计算机中整数表示的标准方式它完美解决了原码和反码的问题。定义正数补码 原码。负数反码 1。等价于该负数的绝对值对应的二进制数所有位按位取反后加1。表示范围对于n位二进制数范围为[-2^(n-1), (2^(n-1)-1)]。例如8位补码的范围是[-128, 127]比原码和反码多表示一个数-128。核心优势0的唯一表示0和-0的补码都是00000000消除了歧义。统一加减法减法运算可以转换为加法运算无需额外的硬件判断逻辑。符号位可以像数值位一样参与运算简化了CPU的算术逻辑单元(ALU)设计。模运算的自然结果补码的本质是模运算。对于n位二进制模为2^n。一个负数X的补码正是2^n - X的二进制表示。这使得加法器在溢出时自动实现了模运算的结果。示例8位补码表示与转换十进制真值原码反码补码计算过程负数50000 01010000 01010000 0101--51000 01011111 10101111 1011反码(11111010) 1 1111101100000 00000000 00000000 0000--01000 00001111 1111(1)0000 0000(溢出丢弃) → 0000 0000--128无法表示无法表示1000 0000128 2^7直接对应补码定义3. 编码方式对比与应用| 特性 | 原码 | 反码 | 补码 || :--- | :--- | :--- | :--- ||正数表示| 符号位0 绝对值 | 与原码相同 | 与原码相同 ||负数表示| 符号位1 绝对值 | 符号位不变数值位取反 | 反码 1 ||零的表示|0和-0两种 |0和-0两种 | 唯一 (000...0) ||表示范围 (n位)| [-(2^(n-1)-1), (2^(n-1)-1)] | 同原码 | [-2^(n-1), (2^(n-1)-1)] ||加减法运算| 复杂需判断符号 | 可转换但有循环进位 |统一为加法最简便 ||硬件实现| 复杂 | 较复杂 |简单高效||现代应用| 基本淘汰 | 基本淘汰 |整数运算标准|4. 补码运算实例补码的核心优势在于将减法变为加法。运算时所有操作数均以补码形式参与结果也是补码。示例计算 75 (使用8位补码)转换为补码7的补码0000 0111-5的补码1111 1011(如上表)执行加法运算a 0b00000111 # 7的补码 b 0b11111011 # -5 的补码 result (a b) 0xFF # 加法并取低8位模拟溢出截断 print(bin(result)) # 输出: 0b10 - 0b00000010 (高位溢出丢弃)解读结果0000 0010是2的补码因此7 - 5 2。示例计算 -3 4转换为补码-3的原码1000 0011反码1111 1100补码1111 1101-4的原码1000 0100反码1111 1011补码1111 1100执行加法运算result (a b) 0xFF print(bin(result)) # 输出: 0b11111001 将结果补码1111 1001转换回十进制符号位为1是负数。数值位取反0000 0110。加10000 0111 7。因此原数是-7。验证(-3) (-4) -7。5. 扩展知识移码移码主要用于浮点数的阶码指数表示如 IEEE 754 标准。定义在补码的基础上将符号位取反。即移码 补码 2^(n-1)对于n位数。目的使所有指数的机器数都表现为正数便于浮点数比较大小。示例8位移码偏移量128(2^7)。十进制真值补码移码 (补码符号位取反)50000 0101|1000 0101| | -5 |1111 1011|0111 1011 |6. 编程语言中的实践在高级编程语言如 Java、C、C、Python中程序员通常直接使用有符号整数类型如int编译器或解释器会自动处理补码的转换和运算。// Java 示例展示负数的补码表示 public class TwosComplementDemo { public static void main(String[] args) { int positive 5; int negative -5; System.out.println(十进制 5: positive); System.out.println(二进制(补码): Integer.toBinaryString(positive)); // 输出: 101 (省略前导0) System.out.println(十进制 -5: negative); // 输出5 的32位补码表示 System.out.println(二进制(补码): Integer.toBinaryString(negative)); // 输出: 11111111111111111111111111111011 } }在 Java 中Integer.toBinaryString()方法返回的是整数补码表示的二进制的字符串形式对于负数是完整的32位补码。参考来源原码-反码-补码的详细解释关于二进制的原码 、反码、补码的简要解释说明原码反码补码解释原码反码补码移码四种码详细解释计算机原码、反码、补码是什么解释题目练习
RELATED

相关推荐

零成本性价比方案:2026如何快速总结视频,每月省下20小时工时

零成本性价比方案:2026如何快速总结视频,每月省下20小时工时

我作为长期测试AI效率工具的产品运营视角博主,实测下来,2026零成本快速总结视频的方案,完全可以靠主流AI转写总结工具的免费额度实现,能覆盖绝大多数自媒体人内容学习、制作流程记录的需求,1小时视频10分钟就能出结构化…

📅 2026/9/26 9:24:49
实体AI驱动私有5G网络市场规模突破66亿美元

实体AI驱动私有5G网络市场规模突破66亿美元

SNS Telecom and IT的最新研究进一步印证了私有移动网络市场的持续增长势头。研究显示,到2029年,全球私有5G网络的年度支出预计将突破66亿美元。这一增长的背后,是工业巨头们在现有设施和新建绿地项目中大规模推进多站点、跨国私有5G部署&…

📅 2026/9/23 7:55:49
5分钟掌握缠论分析:ChanlunX通达信插件完整指南

5分钟掌握缠论分析:ChanlunX通达信插件完整指南

5分钟掌握缠论分析:ChanlunX通达信插件完整指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否觉得缠论分析太过复杂,手动绘制笔、段、中枢既耗时又容易出错?Ch…

📅 2026/9/16 23:58:22
MORE NEWS

更多资讯

📰

STM32上电启动全解析:从复位向量到RTOS任务切换的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

git clone指定路径全攻略:目标目录、Sparse Checkout与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Qt窗口程序开发实战:工程骨架、布局、信号槽、线程与打包排错

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

昂科烧录器适配HVC5221D:车规电机驱动器量产烧录全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

纯Verilog实现PNG解码:10套FPGA工程源码与硬件加速实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

循环神经网络改进详解:多层LSTM、双向RNN与预训练实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬