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

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

比如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. 【转载】JUnit各个注解的含义
  2. java jar 打印_Java 打印流 及 commons-io.jar包方法
  3. 算法----选择排序(select sort)
  4. Mongodb的索引
  5. U3D-LookAt插值动画
  6. [Vijos 1143]三取方格数
  7. [Mac] php安装protobuf扩展
  8. 数据分析职场路上有困惑?不妨花几分钟来看看...
  9. 一个表可以建几个索引_一个人失业在家,可以做哪些挣钱的小生意?推荐几个供参考...
  10. 2018年湘潭大学程序设计竞赛 - 题解
  11. Google开发者账号申请
  12. 【ROS小车9】仅用 RPLIDAR A1(思岚 A1) 雷达在 Ubuntu 虚拟机跑 gmapping
  13. 艺赛旗(RPA)UEBA、RPA 客户端设置部门
  14. oracle9i awrrpt,Oracle AWR 介绍及报告分析(1) final
  15. 图片水印如何去除,怎样处理带水印的图片?
  16. 144-小珂的苦恼(nyoj)
  17. asyncio中的call_soon、call_later、call_at、call_soon_threadsafe方法
  18. 量子计算(2)科学背景2:量子力学基本理论(下)
  19. mysql pmt函数怎么用,Sword cjson库函数使用
  20. sockert组成部分_主板的基本结构

热门文章

  1. 毕业设计 stm32智能恒温水杯 - 单片机 物联网 嵌入式
  2. Android开发,透明指示层、引导层、功能说明层的分享及使用
  3. einops库中rearrange,reduce和repeat的介绍
  4. 小程序 this.$scope.globalData与getApp().globalData
  5. 宝塔linux面板php配置教程,宝塔Linux面板——新手安装教程
  6. vscode优美的主题
  7. RTL8192CUS驱动程序编译
  8. 安装oracle后重启电脑很卡,关于linux下安装oracle之后,重启系统后oracle不能正常启动的配置总结...
  9. fastadmin 自定义table顶部的按钮
  10. html5图灵机器人自动会话代码,Vue结合图灵机器人制作的一个简单的仿微信聊天的自动回复机器人...