当前位置: 首页 > news >正文

原码、反码、补码

原码、反码、补码是计算机中表示有符号整数的三种编码方式,其设计目的是解决负数在二进制中的表示及运算问题。

理解它们的核心是掌握 “如何用二进制表示负数” 以及 “如何让加减法运算统一简化”。

一、原码

定义:最直观的编码方式,直接用二进制表示数值,最高位作为符号位(0 表示正数,1 表示负数)。

  • 正数:符号位为 0,其余位表示数值本身(与二进制原数一致)。
  • 负数:符号位为 1,其余位表示数值的绝对值。

示例(以 8 位整数为例):

  • 十进制+5的原码:00000101(符号位 0,数值位5的二进制)
  • 十进制-5的原码:10000101(符号位 1,数值位5的二进制)

问题

  • 0 有两种表示:+0(00000000)和-0(10000000),浪费存储空间。
  • 加减法运算复杂:正数加负数时,需要先比较绝对值大小,再用大数减小数,最后确定符号,无法直接通过二进制加法实现。

二、反码

定义:为解决原码运算问题设计,规则是:

  • 正数:反码与原码相同。
  • 负数:符号位不变(仍为 1),其余数值位按位取反(0 变 1,1 变 0)。

示例(8 位整数):

  • +5的反码:00000101(与原码相同)
  • -5的反码:11111010(原码10000101的数值位取反)

改进与局限

  • 改进:一定程度简化运算,例如5 + (-3)可通过反码直接相加(忽略溢出位):
    00000101(+5 反码) + 11111100(-3 反码) = 00000001(结果反码,对应 + 1),正确。
  • 局限:0 仍有两种表示(00000000和11111111),且运算时需处理溢出位(加 1 修正),不够彻底。

三、补码

定义:目前计算机系统中实际使用的编码方式,解决了前两种编码的缺陷,规则是:

  • 正数:补码与原码、反码相同。
  • 负数:符号位不变(1),其余数值位取反后加 1(即 “反码 + 1”)。

示例(8 位整数):

  • +5的补码:00000101(与原码、反码一致)
  • -5的补码:11111011(-5 的反码11111010加 1)

核心优势

  • 0 的表示唯一:只有00000000一种形式(-0的补码与+0相同),节省了一个编码空间。

  • 加减法统一为加法:无需区分正负,直接用二进制加法运算,符号位自动参与处理:

    • 例 1:5 + (-3)
      00000101(+5 补码) + 11111101(-3 补码) = 00000010(结果补码,对应 + 2),正确。
    • 例 2:3 + (-5)
      00000011(+3 补码) + 11111011(-5 补码) = 11111110(结果补码,对应 - 2),正确。
  • 取值范围更大:以 8 位为例,补码可表示-128到127(共 256 个数),而原码 / 反码只能表示-127到127(因-0占用空间)。

四、三者关系与转换(以负数为例)

示例(-5 的 8 位编码):

  • 原码:10000101
  • 反码:11111010(原码数值位取反)
  • 补码:11111011(反码 + 1)

五、为什么计算机最终选择补码?

补码是唯一能同时解决 “0 的唯一表示” 和 “加减法统一运算” 的编码方式,极大简化了硬件设计(CPU 只需加法器即可实现加减运算),同时扩大了表示范围。因此,现代计算机系统(包括 C/C++ 中的int类型)均采用补码表示有符号整数。

总结:
原码:直观但运算复杂,几乎不直接使用。
反码:改进了运算但仍有缺陷,是补码的过渡形式。
补码:目前的标准,完美解决负数表示和运算问题,是理解计算机整数存储的核心。

http://www.hskmm.com/?act=detail&tid=29160

相关文章:

  • C++ - 从字符串中提取一个数的若干种写法
  • ABC 日志
  • 251012
  • 如何在UE中创建动态枚举
  • 能连上 GitHub(SSH 验证成功),却 push 失败?常见原因与逐步解决方案 - 详解
  • 换根dp的一个trick
  • 搭建SSH服务于RK3399平台上的Ubuntu 18.04,实现远程连接
  • 深入探讨MySQL的二进制日志(binlog)选项
  • sparkml 多列共享labelEncoder - 详解
  • 一键解决MetaHuman播放动画时头部穿模问题
  • 忽然很好奇为什么素未谋面的大家都知道我是学姐?
  • UE网络编程完全指南:UDP TCP WebSocket实现详解
  • 配置Nginx服务器在Ubuntu平台上
  • 缓存一致性验证秘笈
  • 从十五岁的今天写给十六岁的明天
  • kali U盘启动持久化
  • 深入解析:Telerik UI for ASP.NET MVC 2025 Q3
  • Java依记 DAY02 - I
  • 元推理:汉字的发音,同音也是某种同构?
  • 题解:qoj7759 Permutation Counting 2
  • WAV 转 flac 格式
  • EtherCAT芯片没有倍福授权的风险
  • 为何是「对话式」智能体?因为人类本能丨对话式智能体专场,Convo AIRTE2025
  • 2014-2024高考真题考点分布详细分析(另附完整高考真题下载) - 详解
  • P4147 玉蟾宫(最大子矩形)
  • 2025 年 10 月西安房屋鉴定公司最新推荐排行榜:覆盖房屋安全评估、结构检测、承载力鉴定、危房鉴定领域,助您选专业机构
  • 完整教程:HAProxy 完整指南:简介、负载均衡原理与安装配置
  • K
  • 阿里发布「夸克 AI 眼镜」:融合阿里购物、地图、支付生态;苹果拟收购计算机视觉初创 Prompt AI丨日报
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名AI聊天框架需求探索