美文网首页工作生活
float在内存中如何存储与转换

float在内存中如何存储与转换

作者: 追逐着初衷 | 来源:发表于2019-07-02 13:31 被阅读0次

本次实验机器window7和vs2008

浮点数标准百度百科

浮点数存储的规定

浮点数的存储规定

先要了解几个问题。一个浮点数四个字节,c语言默认输出%f是小数点后六位

上图范围是0-31的一张图。

首先红色区域范围是0-22,作用是存储十进制转成二进制后,经过科学计数法排序后,产生的23位小数

其次是绿色区域范围是23-30,作用是存储科学计数法中的指数。默认一开始是127.因为8位范围还要区分正负指数,必须要能加减。所以取范围的中间127。二进制表示就是01111111这是一开始绿色的值

最后蓝色区域范围是31,只有一位,主要区分这个浮点数的正负的,0代表正数,1代表负数。

接下来我们看一个例子体会一下这个存储

我要看浮点数6.24在内存中如何存储的

代码是

代码

我们设置一个断点方便查看f的值

f的值

内存中存储的值 变量在内存中的值

f打印出来的值(因为float默认打印出精度小数点后6位然后4舍五入了)

输出出来的值

好了。我们开始研究怎么来的

首先先把6.24转换成2进制

二进制   110.0011110101110000101000111101011100001010001111011

我们能看到很长的一串。我们先将他转成科学计数法

1.100011110101110000101000111101011100001010001111011e2

因为使用了科学计数法小数点前面必定会有一个1所以存储的时候不存储这个1.就从小数点后开始数23位

23位数 10001111010111000010100 这个是红色区域的23位数

绿色区域默认是127。现在得加上指数2。现在是129用2进制表示就是10000001

蓝色区域,因为是正数就填0

然后我们把这个2进制拼接起来

01000000110001111010111000010100转成16进制40c7ae14

内存值

我们这个是高位在前得结果,如果按照内存得低位在前 14aec740就和内存中是一样的。

现在我们已经知道如何存储了,但是他又是如何转换成小数得呢

我们拿出原来得23位小数 10001111010111000010100

这个是小数二进制转十进制和整数时一样得就是2得次方相加

2^-1+2^-5+2^-6+2^-7+2^-8+2^-10+2^-12+2^-13+2^-14+2^-19+2^-21

23位小数计算结果

结果是0.559999942779541015625

这个结果是小数得还得加上内存不记录得二进制得1,转成10进制还是1所以加上1

1.559999942779541015625

现在这个结果还少了刚刚科学计数法中得,二进制得2次方。所以要给结果乘以4.

结果

转回去得值

看到结果觉得不对?

结果是正确,那是因为精度得原因。我打印出小数点后10位得6.24f得值。结果是一样的

打印出小数点后10位

这个问题。我一开始一直没想懂最后得第7位怎么来的。到后面经过百度,然后不要脸得问老师,换取老师得答案。

献给跟我一样有疑问的人,顺便做记录。

文章存在问题请发邮件至witwuming@foxmail.com

相关文章

  • float在内存中如何存储与转换

    本次实验机器window7和vs2008 浮点数标准百度百科 浮点数存储的规定 先要了解几个问题。一个浮点数四个字...

  • 整数在内存中的存储大家都知道,那么小数是怎么存储的呢?

    整数在内存中的存储方式比较简单,我们来看看小数在内存中的存储方式。首先,要学会十进制小数与二进制小数之间的转换。 ...

  • 数据持久化之NSUserDefaults

    所谓的数据持久化、就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以...

  • iOS中的数据持久化

    本文由我们团队的王瑞华童鞋撰写。 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据...

  • 数据持久化

    数据持久化(PO)就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.数据模型可以是...

  • 常用操作

    顶点转换到投影空间 uv坐标转换 纹理采样 纹理尺寸默认存储在float4变量 {TextureName}_Tex...

  • MyBatis框架介绍及实战操作

    一、基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数...

  • MyBatis框架介绍及实战操作

    一、基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数...

  • MyBatis框架介绍及实战操作

    一、基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数...

  • float如何存储

    float在计算机中用32位来表示。 其中包含了1位符号位S,8位阶码E和23位尾数M。比如1.25,换算成科学技...

网友评论

    本文标题:float在内存中如何存储与转换

    本文链接:https://www.haomeiwen.com/subject/zddzcctx.html