• 计算机中的 原码、反码、补码 详解


    1 概述

    1.1 机器数

    机器数:数字在计算机中的 二进制表示形式(0 和 1)
    描述
    特点符号数字化。最高位为符号位,正数为 0,负数为 1
    数的大小受机器字长的限制。机器字长一般是字节的整数倍,1字节(Byte)= 字长 8 位(bit)
    举例 ① 十进制数 +3 的机器数就是:0000 0011
    ② 十进制数 -3 的机器数就是:1000 0011

    注:假设机器字长为 8 位,以下同

    1.2 真值

    真值:机器数 对应的 真正数值
    描述
    举例 ① 机器数 0000 0011 的真值 = +000 0011 = +3
    ② 机器数 1000 0011 的真值 = -000 0011 = -3
    而不是形式值 131(1000 0011 转成 十进制 就是 131)

    2 计算机中数据的表示

    2.1 原码

    原码描述
    规则最高位 表示符号位,其余位表示 数值位(同 机器数
    优点简单直观,便于人类理解
    缺点符号位 不能参与运算,需要设计复杂的硬件电路才能处理,贵!
    (用补码替代: 补码 的符号位可以参与运算)

    在这里插入图片描述

    注:计算机一般不做减法(电路设计复杂,价格高),常用加法替代
    如:A - B = A + (-B)

    2.2 反码

    反码描述
    规则正数:等于 原码
    负数:在 原码 的基础上,符号位 不变,其余 按位取反(0变1,1变0)
    作用表示中间状态,方便 原码补码 之间进行转换

    在这里插入图片描述

    2.3 补码

    补码描述
    规则正数:等于 原码
    负数:在 反码 的基础上 + 1
    说明计算机中数据均已 补码 的形式进行运算

    在这里插入图片描述

    在这里插入图片描述

    2.4 移码

    移码描述
    规则无论正负,将 补码符号位按位取反,数值位不变
    说明表示 浮点数 中的 阶码 (IEEE 754 标准)

    3 总结

    3.1 相互转换

    在这里插入图片描述

    3.2 取值范围

    编码定点整数定点小数
    最小值最大值数值个数最小值最大值数值个数
    原码 -(2n-1 - 1) 2n-1 - 1 2n-1 -(1 - 2-(n-1)) 1 - 2-(n-1) 2n-1
    反码
    补码 -2n-1 2n -1 2n
    移码---

    说明:
    ① 原码 和 反码 一样,存在 ± 0 \pm0 ±0 的情况 +0=0000 0000,-0=1000 0000
    ② 补码 和 移码 一样,+0=0000 0000,-128=1000 0000= − 2 7 -2^7 27(特殊规定,记住)
    ③ 补码 可表示的数值位数 比 原码、反码 多 1,就在于 ± 0 \pm 0 ±0
    ④ 上述 n 表示机器字长
    ⑤ 移码 只能用于表示定点整数

    当 n = 8 时,取值如下
    编码 定点整数定点小数
    负数0正数负数正数
    最小值最大值取值最小值最大值最小值最大值最小值最大值
    原码 1111 1111
    = -(2 7-1)
    1000 0001
    = -1
    1000 0000 = -0
    0000 0000 = +0
    0000 0001
    = 1
    0111 1111
    = 2 7-1
    1.111 1111
    = -(1-2-7)
    1.000 0001
    = -2-7
    0.000 0001
    = 2-7
    0.111 1111
    = 1 - 2-7
    补码 1000 0000
    = -2 7
    1111 1111
    = -1
    0000 0000 = +0
    = 0
    0000 0001
    = 1
    0111 1111
    = 2 7-1
    1.000 0000
    = -1
    1.111 1111
    = -2 -7
    0.000 0001
    = 2-7
    0.111 1111
    = 1 - 2-7

    红色字体为特殊规定,记住即可

    3.3 网工软考真题

    【例题1】机器字长为 n 位的二进制数可以用补码来表示()个不同的有符号定点小数
    A. 2 n 2^n 2n
    B. 2 n − 1 2^{n-1} 2n1
    C. 2 n − 1 2^n - 1 2n1
    D. 2 n − 1 + 1 2^{n-1} + 1 2n1+1

    参考答案:A
    补码没有 ± 0 \pm 0 ±0 之分

    【例题2】采用 n 位补码(包含一个符号位)表示数据,可以直接表示数值()
    A. 2 n 2^n 2n
    B. − 2 n -2^n 2n
    C. 2 n − 1 2^{n-1} 2n1
    D. − 2 n − 1 -2^{n-1} 2n1

    参考答案:D
    补码的取值范围:[ − 2 n − 1 , 2 n − 1 − 1 -2^{n-1},2^{n-1}-1 2n12n11]

    【例题3】计算机中长采用原码、反码、补码和移码表示数据,其中, ± 0 \pm 0 ±0 编码相同的是()
    A.原码和补码
    B.反码和补码
    C.补码和移码
    D.原码和移码

    参考答案:C
    原码 和 补码 中:+0 = 0000 0000,-0 = 1000 0000
    补码 和 移码 中:+0 = 0000 0000,-0 => -128 = 1000 0000 (没有 -0,但有 -128,特殊规定,记住即可)

    【例题4】若某整数的 16 位补码为 F F F F H FFFF_H FFFFH(H表示十六进制),则该数的十进制数为()
    A.0
    B.-1
    C. 2 16 − 1 2^{16} - 1 2161
    D. − 2 16 + 1 -2^{16} + 1 216+1

    参考答案:B
    [ F F F F H ] 补 [FFFF_H]补 [FFFFH] = [ 10...01 ] 原 = − 1 [10...01]原= -1 [10...01]=1

  • 相关阅读:
    低代码:数智化助力新农业发展
    微信“刷掌支付”上线,扫手就可以付款!你知道怎么开通了吗?
    嵌入式和 Java 走哪条路?
    【云原生】springcloud08——Ribbon负载均衡调用
    Python3中的“指针”
    【Locust】模拟多用户并发与实战
    微软校园大使喊你来秋招啦!
    提升绘图效率不再难,看看这8款AI流程图软件,一键快速生成流程图!
    eNSP-OSPF协议其他区域不与骨干区域相连解决方法1
    Google Cloud X Kyligence|如何从业务视角管理数据湖?
  • 原文地址:https://blog.csdn.net/qq_34745941/article/details/127574811