问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

计算机编码方式:原码、反码、补码

创作时间:
作者:
@小白创作中心

计算机编码方式:原码、反码、补码

引用
1
来源
1.
https://www.cnblogs.com/johnnyzen/p/18132824

原码、反码和补码是计算机中用来表示带符号整数的三种编码方式,它们在计算机内部的运算和表示过程中发挥重要作用。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

1 计算机编码方式:原码 / 反码 / 补码

1.1 概念辨析

  • 原码:正数是其二进制本身;负数是符号位为1,数值部分取X绝对值的二进制。
  • 例如,
    +5
    的原码是
    0000 0101

    -5
    的原码是
    1000 0101
  • 反码:正数的反码和原码相同;负数是符号位为1,其它位是原码取反。
  • 补码:正数的补码和原码,反码相同;负数是符号位为1,其它位是原码取反,未位加1。(或者说负数的补码是其绝对值反码未位加1)
  • 移码:将符号位取反的补码(不区分正负)
    举例说明:
    编码 $$108_{10}$$(sbyte) $$-108_{10}$$(sbyte)
    原码 01101100 11101100
    反码 01101100 10010011
    补码 01101100 10010100
    移码 11101100 00010100

1.1.1 原码

  • 原码
    Sign-Magnitude Representation
    ): 原码是最直接的表示方法,其中最高位表示符号位
    0
    表示正数,
    1
    表示负数),其余位表示数值的绝对值
  • 例如,
    +5
    的原码是
    0000 0101

    -5
    的原码是
    1000 0101
  • 原码的优点表示直观,但在进行加法减法运算时存在问题。

1.1.2 反码

  • 反码
    One's Complement
    ): 为了解决原码的加法减法问题,人们引入了
    反码
    表示。在
    反码
    中,正数的反码与其
    原码相同,负数的反码是将其原码每位取反**(0变1,1变0)。
  • 例如,
    +5
    的反码是
    0000 0101

    -5
    的反码是
    1111 1010
  • 尽管反码解决了加法问题,但仍然存在溢出的表示问题。

1.1.3 补码

  • 补码
    Two's Complement
    ): 为了彻底解决加法和表示问题,人们引入了补码表示。
  • 补码中,正数的补码与其原码相同,负数的补码是将其原码每位取反再加1
  • 例如,
    +5
    补码
    0000 0101

    -5
    的补码是
    1111 1011
  • 补码表示不仅解决了加法和表示问题,还能够自然地处理溢出
  • 补码表示的优势在于:它允许用相同的方式处理正数负数,以及能够在数字的范围内进行循环运算,而无需额外的处理。
    因此,在大多数计算机体系结构中,补码表示被广泛采用用于带符号整数的表示和运算。

1.1.X 小结

  • 总结起来,原码反码补码是用于表示带符号整数的三种编码方式
  • 原码表示直观,反码解决了加法问题,而补码不仅解决了加法问题,还能够自然处理负数的表示和溢出问题。
  • 在计算机中,补码表示是最常见和有效的带符号整数表示方式。

1.X 案例

1.X.1 案例1:真值、原码和补码的关系

  • 以补码定义式为基础,沿数轴列出典型的真值、原码与补码表示,可清楚了解补码的有关性质
    真值、原码和补码的关系
  • (1) 在补码表示中,最高位X0(符号位)表示数的正负,在形式上与原码相同,即 0正 1负。但补码的符号位是数值的一部分,由补码定义式计算而得。
    例如,负小数补码X0中为 1,这个 1是真值X(负)加模 2后产生
  • (2) 在补码表示中,数 0只有一种表示,[+0]补 =[-0]补 =0.000……0
  • (3)负数补码表示的范围比原码稍宽,多一种数码组合。对于定点数,若为纯小数,表示范围为:
    ,若为纯整数,表示范围为:

1.X.2 案例2:0的补码

  • 数0的补码表示是唯一的。
  • [+ 0]补 = [+0]反 = [+0]原 = 00000000
  • [- 0]补 = 11111111+1 = 00000000

1.X.3 案例3:补码

==(推断)==>
原码

  • 例:已知一个补码
    1111 1001
    ,则:
    原码

    1000 0111
    (-7)。
    解:因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余七位
    111 1001
    取反后为
    000 0110
    ;再加1,补上负数的
    1
    ,所以是
    1000 0111

X 参考文献

  • 什么是原码、反码和补码 - 百度/小波程序员
  • 补码 - 百度百科
  • 原码、反码、补码和移码详解 - 博客园【推荐】
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号