[C语言]浮点数在内存中的存储相关知识点-创新互联

先从一道例题开始:

创新互联公司专注于企业成都全网营销、网站重做改版、兴安网站定制设计、自适应品牌网站建设、H5响应式网站成都做商城网站、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为兴安等各大城市提供网站开发制作服务。

图  1                      

图  2

从上述例题我们知道,整形和浮点型的内存存储方式有不同之处;

下面进行详细解读:

根据国际标准IEEE 754,任意一个二进制浮点数V可以表达成以下的形式:

->>(-1)^S*M*2^E;

->>(-a)^S表示有效符号位,当s=0,V为正数,当s=1时,V为负数;

->>M表示有效数字,大于等于1,小于2;

->>2^E表示指数位;

->举例来说:

1.十进制的5.0,写成二进制是101.0,相当于1.01*2^2。那么按照上面V的格式,可以得出:  s=0;M=1.01;E=2;

2.十进制的-5.0,写成二进制是-101.0,相当于-1.01*2^2。那么按照V的格式,可以得到:                     s=1;M=1.01;E=2;

浮点数的存入:

-->>IEEE 754规定:对于32位的浮点数,最高一位的符号是s,接着的8位是指数E,剩下23位为有效数字M,如下所示:

图  3

对于64位的浮点数,最高一位的符号是s,接着的11位是指数E,剩下52位为有效数字M,如下所示:

图  4

->>需要特别注意:

图  5 

->>对于(-1)^0*1.01*2^2而言,内存中仅会储存1.01中的01,等到拿出来的时候才会将1补上;

图  6

->>例如0.5的二进制为0.1,也就是(-1)^0*1.0*2^-1;因此由上述规定,再将S,M,E存储到内存中的时候: S=0;M=1.0;E=-1+中间数(127)=126;

->>下面再举一个例子:float f=5.5;其二进制为101.1=>>(-1)*1.011*2^2;S=-1,M=1.011,E=2;存进内存的时候E变成129;由图4,其内部结构的二进制序列为:0 10000001 01100000000000000000000;故十六进制转换会成为:40 b0 00 00;存入内存中,由小端存储方式知:内存中为 00 00 b0 40;

浮点数的取出:

可以分为三种情况:

1.E不为1或0:

0 01111110 0000000.....000000;

2.E等于0:

例如二进制序列0 0000000 01100000000000000000000,则还原时表示为:->>

0.011*2^-126,即为真实值;

3.E等于1时:

例如二进制序列0 11111111 01100000000000000000000,则E=255-127=128;则(-1)*(0/1)*1/2^128将会是正负无穷大的值。

->>最后是开始题目的一个详解:

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:[C语言]浮点数在内存中的存储相关知识点-创新互联
当前URL:http://hbruida.cn/article/ccsdod.html