• 计算机组成原理浮点数表示


    浮点数表示

    浮点数的表示分为阶码和尾数;
    比如3.026*1011;阶码是+11;尾数是3.026;
    对于阶码:
    阶符为正,小数点向后移n位(n表示阶的大小);
    阶符为负,小数点向前移n位(n表示阶的大小);

    对于尾数:
    数符表示正负,数值表示绝对值的大小;
    显然尾数的位数越多,表示的数字的精度越高:
    3.026104=30260;
    3.0265
    104=30265;

    阶码和尾数的表示:在这里插入图片描述
    在这里插入图片描述
    二进制浮点数如何确定真值?
    在这里插入图片描述
    阶码用E表示,尾数用M表示,r=2(阶码的底数,通常为你是二进制就是2,是十进制就是10,但是也可以是4,8等等);
    所以浮点数的真值表示可以有上图公式计算得出;
    在这里插入图片描述

    浮点数的规格化

    在这里插入图片描述
    在这里插入图片描述
    因此对于b: 010;0.01001;如果采用1B的空间来存储浮点数b的话,那么因为是9位:010001001,所以最后一位1会被舍弃,从而丢失了一些精度;但是数值位的最高位(符号位必须保留)却是0,是无效的数值位;因此对于b可以进行规格化:将尾数的数值位全部左移一位,0.01001变成了0.1001,同时阶码-1:010->001;于是就保留了精度;010 0 01001 -》001 0 1001(8位)

    双符号位与溢出的挽救

    在这里插入图片描述

    尾数的表示范围
    1.用原码表示的位数的表示范围(数值位的最高位必须是1,如果最高位不是1需要进行规格化,因为最高位是0的话是无效位)

    在这里插入图片描述
    类比定点小数的表示范围:
    在这里插入图片描述
    重述一下顶点小数的补码的表示范围为什么是-1~ 1-2-(n-1)
    对于定点整数
    设位数一共为8位
    原码表示范围为 -127-127,即1111 1111~0111 1111
    反码表示范围为 -127-127,即1000 0000~0111 1111
    补码表示范围为 -128-127,即1000 0000~0111 1111
    我们可以尝试求一下-128的原码,但可以发现7位二进制表示不出来,必须得用8位二进制表示,但这样符号位就被占用了。但由于上面说的补码比原码和补码少一个0的表示方法,这就让补码多了一个10000000来表示其他的数,这里具体的细节我也不是很懂@_@,但可以这样记吧,-1到-127已经有对应的原码和补码了,所以也会有对应的补码,而10000000首位是1代表负数,不能和其他数的表示起冲突所以就是-128了。由此,补码可以表示128个负数,1个0以及127个负数共256个数

    对于定点小数
    还是设位数一共8位
    原码表示范围为1.111 1111 ~0.111 1111,即-127/128到127/128
    反码表示范围为1.000 0000~0.111 1111,即-127/128到127/128
    补码表示范围为1.000 0000~0.111 1111,即-1到127/128
    在这里原码和反码都好理解,就是补码会有一个问题,为什么补码会有一个1.000 0000而且居然对应的值是-1,也就是说如果小数用补码表示的话最小值是-1。这里如果用一开始说的取反加一你会发现根本不是这个值。之后才知道取反加一靠的是原码,但看前面原码的定义公式你会发现原码根本表示不了定点小数-1,原码所能表示的是定点整数-1,定点小数-1这里严谨一点的话其实是-1.0。
    这里要求定点小数-1.0的补码的话就要用到上面的补码定义公式了(要不然我怎么会贴hhh),由公式可知,-1.0的补码为2+X = 2-1.0 = 1.000 0000
    当然也有这样的理解
    总结:由于补码表示0的唯一性,补码比原码少一个-0的表示,多一个-1的表示以及负整数表示范围多了一个-128
    PS:主要是把自己最近碰到的问题写一下让自己记牢一些。其实如果把上面贴的几个公式吃透的话这些问题根本不会有的orz,注意对比原码反码补码边界的取值你会发现其实说的就是这些东西orz

    有关定点整数和小数的表示范围详细还请参考传送门

    对于用补码表示的尾数的取值范围,当符号位是1的时候数值为最高位必须是0,符号位为0的时候,数值位的最高位是1,这样有利于硬件的设计;
    在这里插入图片描述

    补码表示的浮点数的规格化

    在这里插入图片描述

    1.1110100 -> 1.0100000然后110要-3->011;
    结果0011;1.0100000;

  • 相关阅读:
    <C++>类和对象下|初始化列表|explicit static|友元|内部类|匿名对象|构造函数的优化
    基于小波神经网络的信道关闭时间预测,基于ANN的信道OFF时间预测
    springboot瑞吉外卖
    CC导入UE5 人物眼球变白,睫毛粗解决办法思路提供
    这资源也太强了!8月版最新AI脚本插件合集来了
    MyBatis-Plus使用乐观锁具体实现
    uniapp搜索框防抖、自动获取焦点
    linux下Nerdtree安装方法
    python 分类问题 画roc曲线实战
    【LeetCode】623.在二叉树中增加一行
  • 原文地址:https://blog.csdn.net/linjianshaonian_/article/details/127738752