[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语言]浮点数在内存中的存储相关知识点-创新互联
路径分享:http://myzitong.com/article/ccsdod.html