最近看浮点数产生了很多疑问,在网上找答案的时候发现,很多文章都只是告诉你浮点数是怎么样的,但是没有解答为什么要这样,于是自己思考写下自己的理解。

浮点数的二进制表示中,标准格式一般为

比如3.625转化为标准格式为:11.101

而存储到计算机中,不是使用的标准格式,而是使用存储格式。

为什么不是使用标准格式来作为存储格式?

设想一下,假如是使用标准格式来作为存储格式,是不是需要规范前几位为整数位,后几位为小数位。比如前8位作为整数位,那如果现在的数据内容整数位为0,如0.625……的话,就浪费了前八位的空间,这个浪费是以牺牲小数精度为代价。所以才有了存储格式这么个东西。

存储格式介绍

存储格式的规范如下,以单精度浮点数为例,总的长度为32位:

符号位 指数位 尾数位
1 8 23

符号位最简单,表示正负。

在介绍指数位之前,先了解尾数位:

尾数位实际上是还有一个隐藏位为1在尾数位的左侧。

如3.625的二进制格式:(1即是指数位)

(如果不能理解的话,可以将二进制转为10进制来理解:

负指数也一样,如果是0.625,二进制格式为:(-1是指数位)

即将所有浮点数的标准格式转化为:,而1就是隐藏位,不会存储在数据中。这样的好处是,将更多的空间用来存放有效位置,像前边提到的0.4564545……这种很长的浮点数,可以更好的保留精度。

为什么隐藏位是1,而不是0?

不管隐藏位是1还是0,对于指数位是没有影响的,因为可存储的范围不会改变。

但是,用1却可以增加尾数的范围,将一个有效位隐藏,则可以空出多一位来存储后边的一位精度。但是这个时候就会发现,0怎么表示?其实,在浮点数中0是特殊处理的,当指数位全0,尾数位全0时,代表0 。

指数的转换

介绍完了尾数,介绍指数位,如0.625的指数位是-1,用二进制表示的话会需要占用一个符号位:10000001

但是放在存储格式中,实际上的二进制表达是需要给转换一下的,如果有了解过,应该都知道对于单精度浮点数而言,这个转换就是加上127 。

为什么是加127?

因为指数是有正负值的,所以,如果保留符号位的话,8位的指数位可表达范围是:-127~127

而如果给他加上127的偏移量,范围则变成0~254

而因为现在值全都大于等于0了,所以不需要符号位,范围变成:0~255

加了偏移量,可以增加指数的表示范围。

所以比如-1的指数二进制格式为:-1+127 = 126,二进制格式为:01111110

单精度浮点数存储格式理解相关推荐

  1. 32位单精度浮点数存储格式

    32位单精度浮点数的存储格式: 其中s为符号位,占据1bit, f是由低23个bit组成的分数,最高位为0.5,然后是0.25,以此类推.e为2的指数幂,b为偏置(在32位单精度里b=127). 所以 ...

  2. c语言单精度浮点数规格化,对浮点数的一些理解

    浮点数的范围和有效位 对于浮点数,其能表示的数值范围和其有效位如下 类型 比特位 数值范围 有效位 float 32 -3.410^38-+3.410^38 6~7位 double 64 -1.710 ...

  3. 单精度浮点数计算机存储的理解(IEEE 754)

    浮点数剖析 以下是该标准对浮点数格式的描述. [编辑]本文表示比特的约定 把W个比特(bit)的数据,从内存地址低端到高端,以0到W−1编码.通常将内存地址低端的比特写在最右边,称作最低有效位(lea ...

  4. 单精度浮点数 float、双精度浮点数 double

    3.3 浮点数表示法 内容导视: 小数对应的二进制 科学计数法 浮点数表示法 最大值.最小值 特殊值 3.3.1 小数对应的二进制 之前漏掉了小数对应的二进制,现补上. 二进制转十进制 从个位数开始向 ...

  5. 浮点数存储格式学习:找到非规格数中最大和最小的数

    在学习<深入理解计算机系统>的浮点数存储里,我想到一个问题,单精度浮点数中,非规格浮点数最大数是几? 00000000011111111111111111111111 符号位:0 指数域: ...

  6. 什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?

    前言 作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型.单精度浮点数.双精度浮点数. 浮点型 首先明确java中浮点型数据类型主要有:单精度float.双 ...

  7. 什么是java双精度浮点数_什么是浮点型?单精度浮点数(float)和双精度浮点数(double)介绍...

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型.单精度浮点数.双精度浮点数. 浮点型首先明确java中浮点型数据类型主要有:单精度float.双精度do ...

  8. App Inventor 四字节转单精度浮点数

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 可以访问https://app.wxbit.com/,展示里面搜索"四字节 ...

  9. 为什么单精度浮点数的精度是7位

    文章目录 起因 浮点数的精度 IEEE754表示 测试 浮点数运算 浮点数精度 我的理解 自己的理解 总结 参考 起因 今天遇到一个问题,角色卡在一个模型边上,在PVD看模型也比较正常.最终原因呢是因 ...

最新文章

  1. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解
  2. python基础知识选择题-python基础知识练习题(二)
  3. 系统制成docker镜像_Docker学习以及镜像制作流程
  4. Sublime Text3软件安装教程
  5. 17章 SPI控制器(XIlinx ZYNQ-7000 SOC UG-585文档)
  6. ArcGIS10.8中如何获取线状、面状数据的折点,并计算折点坐标?
  7. apache ab压力测试报错
  8. Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
  9. 【测试理论基础】史上最强边界值用例设计与实践经验分享
  10. 到底买苹果XS还是XR_iPhone XS和iPhone XR买哪个好?苹果XR和XS区别对比测评
  11. Python学习记录(小甲鱼C的课程)
  12. 微软宣布任命前MOTO亚太总裁梁念坚为中国区CEO
  13. 自动化爬虫selenium基础教程
  14. Alpha多样性之箱线图解读
  15. Android 状态栏工具——一行代码实现状态栏字体变黑
  16. 广点通sdk接入(作为广告主身份)
  17. [LeetCode] 17. Letter Combinations of a Phone Number
  18. 什么是实时操作系统(RTOS)
  19. 计算机音乐作曲排名2019,2019全球歌曲排行榜_数据 2019全球古典音乐排行榜
  20. 免费获取全球10米分辨率的土地分类数据!

热门文章

  1. openwrt下挂载硬盘实现网络共享
  2. Jquery中的队列函数quene()、dequene()、clearQuene()
  3. 上转换发光纳米材料用于小动物成像的简述
  4. FFmpeg解码H264裸流并转换成opencv Mat
  5. 谈谈盲盒小程序开发的核心功能,以及盲盒小程序未来的市场
  6. Android算法学习——打表法的概念
  7. Python控制结构之for循环I
  8. 如何在项目管理中实现任务活动的留痕管理?
  9. linux卸载软件adp,centos 7 ladp 安装
  10. IT痴汉的工作现状41-亲历招投标