文章目录

  • 浮点数的储存规则
  • 浮点数在内存中的储存方式
  • 有效数字M部分
  • 指数E部分
    • E全不为0 或者 E 全不为1
    • E全是0
    • E全是1

浮点数的储存规则

浮点数与实型数据的存储方式是不同的

  num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大?

  还是要关注计算机内部的储存方式

浮点数在内存中的储存方式

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

(-1)^S * M * 2^E

(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。

IEEE 754规定:

对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

IEEE 754对有效数字M和指数E,还有一些特别规定。

有效数字M部分

​ 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中xxxxxx表示小数部分。

  IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxxz这部分。比如保存1.01的时候,只保存01,等到读取取出的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位float类型为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字

指数E部分

至于指数E,情况就比较复杂。

**首先,**E为一个无符号整数(unsigned int)

  这意味着,如果E为8位,它的取值范围为0255;如果E为11位,它的取值范围为02047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。

然后,指数E从内存中取出还可以再分成三种情况

E全不为0 或者 E 全不为1

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将

有效数字M前加上第一位的1。

比如:

0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,则为

1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23

位00000000000000000000000,则其二进制表示形式为:

0 01111110 00000000000000000000000

E全是0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,

有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于

0的很小的数字。

E全是1

这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);

C语言详解|float类型 数据的储存的存储方式详解相关推荐

  1. VS Code写C语言输出long double类型数据不正确的问题

    VS Code写C语言输出long double类型数据不正确的问题 在学习<C Primer Plus>一书时遇到一个例题 #include <stdio.h>int mai ...

  2. Android数据的四种存储方式

    很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQL ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider...

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. 用C语言解“混合类型数据格式化输出”题

    7-6 混合类型数据格式化输入 本题要求编写程序,顺序读入浮点数1.整数.字符.浮点数2,再按照字符.整数.浮点数1.浮点数2的顺序输出. 输入格式: 输入在一行中顺序给出浮点数1.整数.字符.浮点数 ...

  5. 7-7 硬币找钱问题 (10 分)(思路+详解+double类型数据的处理)Come baby!!!!!!!!!!!!!!!!!!!!

    一:题目 设有6 种不同面值的硬币,各硬币的面值分别为5 分,1 角,2 角,5 角,1 元,2元.现要用这些面值的硬币来购物.在购物中希望使用最少个数硬币.例如,1 次购物需要付款0.55 元,如果 ...

  6. java 内存分布_java的各类型数据在内存中分配情况详解_

    1. 有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但掌握Jav ...

  7. 数据结构图,图存储结构详解

    1. 数据结构的图存储结构 我们知道,数据之间的关系有 3 种,分别是 "一对一"."一对多" 和 "多对多",前两种关系的数据可分别用线性 ...

  8. 大端小端存储方式详解

    大端方式:用存储器的低字节地址单元来存放数据的最高字节 小端存放:用存储器的低字节地址单元来存放数据的最低字节 注: 在存储器中,左边的字节地址单元低于右边的字节地址单元,字节地址单元一般由八位二进制 ...

  9. 图片或者其他文件在数据库的存储方式详解

    关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1.  把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...

最新文章

  1. Monkey环境配置
  2. 10使用CSS美化页面
  3. SQL Server 2012笔记分享-49:理解数据库快照
  4. 分享Kali Linux 2016.2最新镜像20160919
  5. python requests 重新定向错误 requests.exceptions.TooManyRedirects: Exceeded xx redirects 解决方法
  6. 26 进程优先级队列Queue
  7. linux-linux top 命令各参数详解
  8. vxworks 学习和windows azure 学习
  9. EMNLP 2019中和BERT相关的一些论文介绍
  10. ASP.NET Core 中间件分类
  11. linux注册平台驱动,关于Linux驱动的平台注册方式-- platform_driver_register
  12. python图书管理系统
  13. 多路复用实现单服百万级别RPS吞吐
  14. Knockout.Js官网学习(event绑定、submit绑定)
  15. 【数学建模】基于matlab模拟十字路口车辆通行【含Matlab源码 1106期】
  16. securecrt下载和注册方法
  17. caffe c++实战:通过训练好的模型对人脸图像进行特征提取(单张图像)
  18. apkg格式怎么打开_pdf怎么转换成word?妙招在手,转换不愁!
  19. 千与千寻主题曲beep函数版
  20. (翻译)测试替身— Fakes, Mocks 和 Stubs

热门文章

  1. Oracle 表解锁
  2. MeeGo系统和SDK升级发布
  3. 读写数据库与读写文件哪个更快
  4. CAD制图初学入门:CAD选项配置的使用技巧
  5. SunJDK的历史转折点
  6. notepad++消除生成bak文件
  7. 在html中加入外部css样式,如何引入CSS样式表?
  8. 『CSS』CSS样式表的三种引入方式
  9. 新学期,新FLAG——新征程
  10. 2021靳吉朕的个人主页源码