浮点数公式:V=(-1)M2E

分2种情况,非规格(-1<V<1这个区间时)和规格(V<=-1或V>=1的区间时)。

1、当表示非规格化小数时,阶码全为0。

2、当为规格化小数时,根据阶码e的计算公式:

E=e - Bias
Bias=2^k-1 - 1
e=E + Bias
e=E + 2^k-1 - 1

举例:(5.25)10 =(101.01)=1.0101 * 22

根据规格数的定义:M=1+f,f=M-1,故f=0.0101

E=2,e=2+28-1 -1 = (129)10 =(10000001)2

当然,以上是为了准确说明和引导理解。实际中,因为单精度浮点数的价码是约定好的8位,共bias也就是127,换成2进制是01111111,我们可以直接拿2的指数的二进制数和0111111相加就可以得出价码的二进制形式了。

重点:有的人说:价码就是2的指数的移码,经过验证这是错误的。移码的定义:

按照上述定义:e=27+E,而根据上面的公式可知:e=2+ E - 1

所以:正确的求法是:知道原码后,将原码从右往左数,第一个1为分界线,右边(含第一个1)求反,左边最高位求反,其余位不变。

这个方法属于二进制的速算技巧了,可以证明出来的,有机会补充上。

举例:(5.25)2 = (101.01)2 = (1.0101 * 22 ) ,由公式得知:E=2=e-127,e=2+127,2的二进制是10,根据上述速算法:e=(10000001),f=01010000000000000000000

故5.25的浮点存储为:01000000101010000000000000000000

编程检查一下:

#include <cstdio>
int main(){float a=5.25;unsigned int b=*(int *)&a;  //把b转为无符号整型,取二进制位for(int i=0;i<32;i++){printf("%d",(b>>(31-i))&1?1:0);}printf("\nb=%d\n",b);  //看看把浮点格式转为int格式后,数字变成啥,for funreturn 0;
}

输出:

vagrant@ubuntu-bionic:~$ ./t
01000000101010000000000000000000   //哈哈,激动,和我刚才推测的一样
b=1084751872   //看到没,float的5.25和unsigned int的1084751872一样的格式。

例2:(0.2)10别小看这个数,在二进制中它是一个无限循环小数(0.001100110011...)2,0011是循环节。这样的数如何解析呢?

它仍然是规格数,不要以为0和1之间,就是非规格数,非规格数用于表示0和极小的数,0.2显然不是,所以它还是规格数。

首先求f和e:把(0.00110011...)2左移3位,让它的小数点左边为1,这是规格数的要求,这样变成这样(1.1001100110011...)2*2-3,变大了23,自然要在缩小23,才保证原数不变。

根据这个:(1.1001100110011...)2*2-3  括号内对应M,后面的指数-3对应E,则f=M-1=(0.100110011...),e=E+127=124=(01111100)2,这里在重点说一下,e的快捷求法,-3的二进制为:3的补码(按位求反+1)得(11111101)2,然后,从右边第一个1为分界线,左边最高位求反,其余不变,右边(含第一个1)全部求反,得(01111100)2 ,这个数就是指数域了。

然后小数域:有f=(0.100110011...)2得出24位(多算1位,考虑舍入得问题),是:(0.100110011001100110011001)2,看到最后第24位是1,故向前进1位,得到(0.10011001100110011001101)2,这个数就是小数域的值了。

总上所述:(0.2)10 的二进制存储为:(00111110010011001100110011001101)2

把上面的验证程序改个数,验证一下输出:

vagrant@ubuntu-bionic:~$ ./t
00111110010011001100110011001101   //哈哈,激动,又对了
b=1045220557

PS,还有一个验证程序的写法,就是用printf函数也可以:不过这个输出16进制,需要自己转一下二进制:

#include <cstdio>
using namespace std;
int main(void)
{
float f = 0.2;
int *df = (int *)&f;
printf("%#x\n",*df);
return 0;
}

输出:

vagrant@ubuntu-bionic:~$ ./t1
0x3e4ccccd

有兴趣可以把a变成任一浮点数,先自己推一下,看答案。

另外,欢迎有人来查错,但不要再无脑的抄别人了,这样,才能共同进步。

转载于:https://www.cnblogs.com/litifeng/p/10487409.html

浮点数指数域(阶码)的存储格式相关推荐

  1. 浮点数的阶码,尾数与移码

    [阶码与尾数] 十进制中通常一个浮点数可以用科学技术法来表示,举例:-306.5可以表示为-0.3065*103 其中 -是符号,指数3是阶或称阶码,0.3065是小数部分   左右段非0包起来的部分 ...

  2. 将0.1101101*2^(-10)表示成阶码用4位移码、尾数用8位原码(含符号位)的浮点数

    0.1101101 * 2^(-10) 表示成阶码用4位移码.尾数用8位原码(含符号位)的浮点数是: 符号位:0 阶码(4位移码):0111 尾数(8位原码):11011010 所以,0.110110 ...

  3. 浮点数阶码的计算和表示【IEEE 754】

    关于IEEE754中,一般教材提到阶码都是用移码表示,计算规则却是偏置值+阶数. 比如说IEEE 754的浮点数表示,在32位浮点寄存器中,-8.25的16进制表示是多少. 我怎么算都是C184000 ...

  4. 原码,反码,补码,阶码,移码

    本文转载自本站大佬"不去上课",原文链接https://blog.csdn.net/ruidianbaihuo/article/details/87875178 原码,反码,补码, ...

  5. 原码,反码,补码,阶码,移码是什么?有什么区别(讨论机器数的表示)

    原码,反码,补码,阶码,移码是什么?有什么区别(讨论机器数的表示) 本文内容参考自王达老师的<深入理解计算机网络>一书<中国水利水电出版社> 一.机器数解释: 机器数是计算机中 ...

  6. IEEE754标准 阶码

    IEE754浮点数的格式: 阶码采用偏移量表示(某些课本会称为移码表示,但与普通移码略有差别),尾数用原码表示 注意:IEE754对阶码采用偏移量表示,单精度浮点数偏移值为127,双精度浮点数的偏移值 ...

  7. IEEE754阶码真值范围问题

    以32为浮点数为例 为什么阶码真值范围为-126-127. 比如有人会觉得阶码真值加上偏置量127可以为255(11111111),那做个减法真值可以为128呀. 其实提出这个问题只是因为你没注意到I ...

  8. 为什么IEE754标准中,32位浮点数的指数转换为阶码时需要加上数值为127的偏移量?

    首先阶码为啥用移码表示 为了简化浮点数的比较,故我们使用移码来表示阶码位,这样就不至于在比较时去考虑两次符号位了. 其次IEEE754中有如下规定: 1)当阶码E为全0且尾数M也为全0时,表示的真值为 ...

  9. 浮点数的加减运算(阶码、尾数)

    浮点数尾数运算  < ---- >  原码加/减运算 原码:+|x|  或者  -|x|      (正数=0+|x|    负数的=1+|x| ) 符号位和数值部分:分开处理 仅对[数值 ...

  10. 认识32位浮点数(分别输出符号,阶码,尾数)

    按IEEE 754标准,32位浮点数的标准格式如下图所示. 例如,一个浮点数的二进制数格式为: 则该数的三个部分分解如下: 1)符号位:0 2)阶码部分:10000010 3)尾数部分:0110110 ...

最新文章

  1. 奥鹏南开大学18春学期计算机作业,南开18春1709、1803学期《办公自动化基础》在线作业答案.doc...
  2. gmail头像_Gmail与Google+进一步整合:可显示好友头像
  3. UVa 11121 - Base -2 负进制的转化和推广
  4. 吴恩达的 CS229,有人把它浓缩成 6 张中文速查表!
  5. 求两个整数数组乘积最小值
  6. sqlserver检索函数、存储过程、视图 中的关键字
  7. TreeView 控件帮助文件
  8. [CF1107E]Vasya and Binary String【区间DP】
  9. 光流(八)--总结篇
  10. 国内语料库建设一览表
  11. Maven安装与配置教程
  12. csol修改本地服务器,CSOL简单地控制台优化+显卡优化 低配也能流畅运行
  13. 数据结构链表(C语言实现)
  14. 视觉特效视觉插件包FxFactory pro 8 集各fcpx插件于一体
  15. 大学计算机基础知识点图文,大学计算机基础知识点分布最新版
  16. 深兰科技亮相2022世界人工智能大会:AI创新,共话未来城市建设
  17. 360应用宝上架流程及所需材料
  18. 生成百度网盘文件目录_艾孜尔江撰稿
  19. 大前端relative和absolute详解
  20. E-puck2机器人系列教程

热门文章

  1. Android Studio 控制台输出中文乱码
  2. 世界语言共有4种书写方向
  3. VC使用命令行编译很复杂
  4. 管理感悟:领导如何处理拍马
  5. 爬虫获取::after_这种反爬虫手段有点意思,看我破了它!
  6. centos mysql 二进制_CentOS 7.6 安装二进制Mysql
  7. spring mvc 实现websocket(服务器主动消息推送)
  8. VC++ 只运行一个程序实例
  9. svr测试用MATLAB,基于MATLAB的SVR回归模型的设计方案.doc
  10. python的序列类型包括_python基础之常用序列类型(字符串)