对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit.其实不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE的规范的,float 遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

无论是单精度还是双精度,在内存存储中都分为3个部分:

1) 符号位(Sign):0代表正,1代表为负;

2) 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储;

3) 尾数部分(Mantissa):尾数部分

其中float的存储方式如下图所示:


而双精度的存储方式为:

R32.24和R64.53的存储方式都是用科学计数法来存储数据的

用二进制的科学计数法第一位都是1嘛,干嘛还要表示呀?可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了 24bit,道理就是在这里。

那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数 点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了, 所以指数部分的存储采用移位存储,存储的数据为元数据+127。

下面就看看8.25和120.5在内存中真正的存储方式:

首先看下8.25,用二进制的科学计数法表示为
:1.0001*2^3  按照上面的存储方式,符号位为0,表示为正;指数位为3+127=130,位数部分为 1.00001,故8.25的存储方式如下:  0xbffff380:    01000001000001000000000000000000

分解如下:0--10000010--00001000000000000000000

符号位为0,指数部分为10000010,位数部分为 00001000000000000000000

同理,120.5在内存中的存储格式如下:  0xbffff384:    01000010111100010000000000000000

分解如下:0--10000101--11100010000000000000000

那么如果给出内存中一段数据,并且告诉你是单精度存储的话,你如何知道该数据的十进制数值 呢?其实就是对上面的反推过程,比如给出如下内存数据: 01000001001000100000000000000000

第一步:符号位为0,表示是正数;  第二步:指数位为10000010,换算成十进制为130,所以指数为130-127=3; 第三步:尾数位为01000100000000000000000,换算成十进制为 (1+1/4+1/64); 所以相应的十进制数值为:2^3*(1+1/4+1/64)=8+2+1/8=10.125

最新文章

  1. Android之网络数据存储
  2. HTML的初体验
  3. jquery 删除cookie失效的解决方法
  4. IIs配置文件存放路径
  5. 2、C#基础整理(运算符、数据类型与转换、var关键字)
  6. Java Day 03
  7. FreeModbus Slave 改进的eMbPoll()【worldsing 笔记】
  8. Redis Sentinel中的机制与原理详解
  9. win8如何显示文件后缀名
  10. HighCharts之2D堆条状图
  11. Android原生嵌入React Native
  12. Elasticsearch学习笔记三
  13. 解决 warning I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  14. 57.纯 CSS 创作一双黑暗中的眼睛
  15. 安装scrapy框架
  16. 【模板】堆优化 + dij +pair 存储
  17. Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
  18. python类和模块区别,python命名空间
  19. HTML5: SVG (可缩放矢量图形)
  20. 使用D3D渲染YUV视频数据<转>

热门文章

  1. 【转载】C++中的static关键字的总结
  2. php结合redis实现高并发下的抢购、秒杀功能【转】
  3. idea debug启动项目慢或者启动不了
  4. wlr快捷键
  5. HTML5 canvas 圆盘抽奖
  6. Android 6.0 动态申请 音频+拍照+相册 权限
  7. 起始授权机构(SOA)
  8. android gesture检测
  9. 【Theory of Generalization】林轩田机器学习基石
  10. spring 笔记3: Spring 多环境配置文件切换