该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit,我们在声明一个变量float f = 2.25f的时候,是如何分配内存的呢?其实不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE的规范的,float 遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

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

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

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

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

R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制 的科学计数法表示就为:8.25* 10^0,而120.5可以表示为:1.205*10^2。而我们傻蛋计算机根本不认识十进制的数据,它只 认识0和1,所以在计算机内存中,首先要将上面的数更改为二进制的科学计数法表示,8.25用二进制表示可表示为1000.01,120.5用二进制表示 为:1110110.1。用二进制的科学计数法表示1000.01可以表示为1.00001*2^n ,1110110.1可以表示为 1.1101101* 2^n,任何一个数的科学计数法表示都为 1.xxx*2^n , 尾数部分就可以表示为xxxx,第一位都是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

2字节十六进制浮点数 qt_Qt中如何实现十六进制“41A4 0000”十六进制转为浮点数20.5呢?...相关推荐

  1. 2字节十六进制浮点数 qt_Qt 中十六进制字节流转换为Base64编码

    在Qt中,在网络通信时,有时需要将16进制字节流转换为Base64编码传输,在Qt的QByteArray类中,提供了与Base64转换的接口: //16进制字节流转为Base64 QByteArray ...

  2. 深度解剖数据在内存中的存储!!数据在内存中原来是这样表示的?为什么浮点数和整数的存储方式差距这么大?

    文章目录 Data Storage 1. 数据类型 1.1 整型家族 1.2 浮点数家族 1.3 指针类型 1.4 构造类型 2. 整型在内存中的存储 2.1 二进制表示形式 2.1.1 正数 2.1 ...

  3. python的浮点数_python中浮点数的精度

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python中,浮点数运算,经常会碰到如下情况:? 出现上面的情况,主要还是因浮 ...

  4. C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么?

    C语言学习(十一)小数在内存中是如何存储的?定点数与浮点数各自的优势在哪?规格化浮点数与非规格化浮点数又表示什么? 浮点数与定点数 小数在内存中以浮点数形式存储.浮点数并不是一种数值分类,他和整数.小 ...

  5. stm32程序中串口发送以及VC++后台软件接收浮点数所遇到问题的处理总结

    一.stm32程序 通过查找网络资料,决定采用函数转换的方式,实现float数转换成char数,再送入modbus寄存器. 首先,在头文件.h中定义: void float_char(float f, ...

  6. python中的二进制、八进制、十六进制的相互转换

    1 二进制.八进制.十六进制 转到 十进制 使用int(str, n)即可完成二进制.八进制.十六进制到十进制的转换: str:是要转换的进制具体数,类型字符串 n:是要转换的进制,类型整型 1.1 ...

  7. 大端字节序码流中取出2字节_产生字节码

    大端字节序码流中取出2字节 在这篇文章中,我们将看到如何为我们的语言生成字节码. 到目前为止,我们已经看到了如何构建一种语言来表达我们想要的东西,如何验证该语言,如何为该语言构建编辑器,但实际上我们还 ...

  8. C语言中的二进制、八进制和十六进制的表示

    二进制数.八进制数和十六进制数的表示 一个数字默认就是十进制的,表示一个十进制数字不需要任何特殊的格式.但是,表示一个二进制.八进制或者十六进制数字就不一样了,为了和十进制数字区分开来,必须采用某种特 ...

  9. python的浮点数_Python中整数和浮点数

    Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 1 + 2 + 3 # ==> 6 4 * 5 - 6 # ==> 14 7.5 ...

最新文章

  1. 抓豆瓣的电影评论数据
  2. Acwing第 28 场周赛【完结】
  3. 来吧,我教你画真正的流程图
  4. 在服务器上处理gis文件,云服务器处理gis
  5. 程序员数学基础【三、取模运算(取余运算功能重叠部分)】(Python版本)
  6. plsql查询乱码问题解决
  7. 信息学奥赛一本通C++语言——1010:计算分数的浮点数值
  8. 从零学web前端_从零到前端英雄(第1部分)
  9. MongoDB学习笔记~以匿名对象做为查询参数,方便查询子对象
  10. mysql 种子表_mysql之3种子查询
  11. ERP实施的焦点依然是实施顾问
  12. 考公 | 张小龙讲申论(2019地市级真题)
  13. 人工智能就是计算机科学的英文,AI(人工智能)的英文全称?AI指什么,包含什么?
  14. 图形学基础|景深效果(Depth of Field/DOF)
  15. 图标修改器html,Iconoid(桌面图标修改器)
  16. 发展存储芯片产业 中国是认真的
  17. 2022网鼎杯青龙组wp
  18. ImageNet 1000个类 具体内容
  19. SD卡 SPI模式操作(1)初始化SD卡
  20. html5 居中布局,div 布局水平居中篇

热门文章

  1. java: 在相应的 try 语句主体中不能抛出异常错误java.io.IOException
  2. dede织梦data目录正确迁移及引起的问题解决方法
  3. cmake 成功后, make 出现 No such file or directory 问题解决
  4. C# Random循环生成随机数重复问题解决方案
  5. 全面屏适配方案,终极版,华为隐藏导航栏解决方案
  6. 用g ++编译C ++ 11
  7. 对jQuery和Ajax使用基本身份验证
  8. JSONP的学习(收集整理)
  9. Go基础(复杂类型):映射
  10. 网络正常,但是网络图标上有黄色的三角图标