各种机器码的本质(原码、反码、补码、移码、IEEE754格式阶码)

在这里插入图片描述

总述

  • 无论使用什么格式的机器码来表示真值,若取一定位数n以后,各个比特位的排列个数是一定的,为 2 n 2^n 2n种排列,所以选择什么格式的机器码实质上选择什么映射方式来完成从这 2 n 2^n 2n种离散排列到离散的整数真值的映射,而不同的映射方式其实只是在:算数运算能力、逻辑比较能力和可读性三者中进行权衡。
  • 需要解释上图,需要读者先接受一种思考的角度:比特位的排列可以暂时完全看成看成无符号数,其绝对值从左到右递增,而与具体的机器数格式无关

原码

最符合人类直觉的机器码

算数运算能力:差

  • 符号位不能参与运算,需要另外设置电路进行处理
  • +0和-0分别占了一个排列,既不统一又浪费空间

逻辑比较能力:差

  • 需要先区分符号位且在同一符号内部的变化趋势也不同,正数内部随着比特位的绝对值增大而增大,负数内部随着比特位的绝对值增大而减小。这意味着不仅要设置电路区分正负,甚至正数和负数内部的比较逻辑都需要不同的电路

可读性:好

  • 可读性很好,可以很方便看出真值

反码

后面补码的出现,让反码成为了仅仅为了导出补码的工具

算数运算能力:差

  • 符号位不能参与运算,需要另外设置电路进行处理
  • +0和-0分别占了一个排列,既不统一又浪费空间

逻辑比较能力:一般

  • 只需要区分符号位,在同一符号内部的变化趋势相同,都是随着比特位的绝对值增大而增大

可读性:一般

  • 可读性一般,不容易看出真值

补码

补码继承了反码的优点,克服了反码的缺点。已经是一种很优秀的机器码了

算数运算:非常好

  • 符号位可以直接参与运算
  • 0的表示完成了统一,而且可以多表示一个最小值,一举两得

逻辑比较:一般

  • 同反码一样,只需要区分符号位,在同一符号内部的变化趋势相同,都是随着比特位的绝对值增大而增大

可读性:差

  • 基本上无法读了

移码

虽然补码对于机器而言已经近乎完美,但是在某些需要频繁比较而几乎不需要进行加减运算的场合,补码的表现依然可以改进,因为它每次比较都需要先判断符号位然后再比较。如果能想到一个能免去比较符号这一步的机器码就能解决这个问题,而移码恰好完美符合这一点。

算数运算:一般

  • 不如补码方便,尤其是减法运算

逻辑比较:非常好

  • 逻辑比较:只需要按无符号数的视角比较绝对值即可,绝对值越大所表示的数的真值就越大。不需要额外设置任何电路

可读性:很好

  • 可读性:可以根据移码快速读出两数谁大谁小

IEEE 754阶码(本质是经过改造的特殊移码)

IEEE 754的阶码虽然本质上是移码,但是和一般的移码有所不同

  • 先说明,改造了哪些地方:
    • 全0和全1机器码不能再用作普通阶码,要作特殊解释
    • 偏置值小了1
  • 然后说明,为什么要这么改:
    • 全0和全1意义的修改是为了——需要特殊值来表示无穷大∞、非数NAN、0和非规格化数四种特殊情况
    • 偏置值小1是为了——获得更大的正数阶码
  • 结果:在这两点改动之后,阶码可以表示的真值的范围发生的变化是:
    • 最大值无变化,依然为 2 n − 1 − 1 2^{n-1}-1 2n11,最小值从 − 2 n -2^n 2n变成 − 2 n + 2 -2^n+2 2n+2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值