原码、反码、补码、移码以及他们的关系

举报
福州司马懿 发表于 2025/11/17 17:07:18 2025/11/17
【摘要】 原码、反码、补码和移码是计算机中用于表示数值的编码方式,它们在处理有符号数(正数和负数)时各有特点,尤其在二进制运算中扮演重要角色。以下是它们的详细介绍及相互关系: 1. 原码(Sign-Magnitude)定义:原码是最直观的数值表示方法,用最高位表示符号(0为正,1为负),其余位表示数值的绝对值。示例(以8位二进制为例):+5:00000101-5:10000101特点:直观易懂,但存在...

原码、反码、补码和移码是计算机中用于表示数值的编码方式,它们在处理有符号数(正数和负数)时各有特点,尤其在二进制运算中扮演重要角色。以下是它们的详细介绍及相互关系:

1. 原码(Sign-Magnitude)

定义
原码是最直观的数值表示方法,用最高位表示符号(0为正,1为负),其余位表示数值的绝对值。
示例(以8位二进制为例):

  • +5:00000101
  • -5:10000101

特点

  • 直观易懂,但存在两个零(+0-0),且加减法运算复杂(需判断符号位)。
  • 适用场景:仅用于理解数值的符号与绝对值关系,实际运算中较少直接使用。

2. 反码(Ones’ Complement)

定义
反码是对原码的改进,正数的反码与原码相同,负数的反码是对其绝对值的原码按位取反(符号位不变)。
示例(8位二进制):

  • +5:00000101(与原码相同)
  • -5:11111010(原码10000101取反后得)

特点

  • 解决了原码中加减法运算复杂的问题,但仍存在两个零(0000000011111111)。
  • 适用场景:早期计算机中用于简化运算,现逐渐被补码取代。

3. 补码(Two’s Complement)

定义
补码是现代计算机中最常用的数值表示方法。正数的补码与原码相同,负数的补码是其反码加1。
示例(8位二进制):

  • +5:00000101(与原码、反码相同)
  • -5:
    • 原码:10000101
    • 反码:11111010
    • 补码:11111011(反码加1)

特点

  • 唯一零表示00000000表示+0,10000000在补码中表示-128(8位二进制范围:-128~127),避免了反码中的两个零问题。
  • 运算简便:加法、减法可统一为补码加法(如a - b = a + (-b的补码)),简化了硬件设计。
  • 适用场景:现代计算机中几乎所有数值运算均采用补码表示。

4. 移码(Excess-K)

定义
移码主要用于浮点数的阶码部分,通过将数值加上一个固定偏移量K(通常为2^(n-1)n为位数)来表示。
示例(8位移码,K=128):

  • 实际值0:移码为0 + 128 = 128(二进制10000000
  • 实际值1:移码为1 + 128 = 129(二进制10000001
  • 实际值-1:移码为-1 + 128 = 127(二进制01111111

特点

  • 便于比较:移码的数值大小关系与实际值一致(如10000001 > 10000000对应1 > 0),适合浮点数阶码的排序。
  • 无符号数处理:移码将有符号数转换为无符号数范围,简化了硬件比较逻辑。
  • 适用场景:浮点数标准(如IEEE 754)中阶码的编码方式。

关系总结

  1. 原码、反码、补码的转换链

    • 正数:三者相同。
    • 负数:原码 → 反码(按位取反,符号位不变) → 补码(反码加1)。
    • 补码 → 反码(补码减1) → 原码(反码按位取反,符号位不变)。
  2. 补码与移码的关联

    • 移码可视为补码的符号位取反(以8位为例,补码的符号位为1时,移码对应位为0,反之亦然),但两者用途不同(补码用于数值运算,移码用于阶码比较)。
  3. 设计目的

    • 原码:直观表示符号与绝对值。
    • 反码:简化原码的加减法运算(过渡方案)。
    • 补码:彻底解决加减法运算问题,统一硬件设计。
    • 移码:优化浮点数阶码的比较与存储。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。