浮点数在内存中的存储方式

浮点数在内存中的存储方式

以单精度浮点数(float)为例子

(-1)s * M * 2E

其中S代表符号位,0表示该浮点数为正数,1则表示该浮点数为负数
M表示有效数字,1<=M<2;
E表示指数位

单精度浮点数中,S占1位,M占23位,E占8位

双精度浮点数中,S占1位,M占52位,E占11位

以4.25为例子

4.25(十进制)= 100.01(二进制)

需要先把二进制进行移位,使得整数部分只有1,100.01 = 1.0001 * 2<sup>2</sup>;

因为4.25是正数,所以符号位S = 0,M = 1.0001,E = 2;

IEEE754对M的特殊规定

因为是二进制数,1≤M<2,而M可以写成 1.xxxxxx 的形式,其中xxxxxx是小数部分

IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分

比如保存1.01的时候,只保存小数点后的01,等到读取的时候,再把第一位的1加上去

这样做的目的是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。
1、十进制转二进制

以4.25为例子,整数和小数部分分开转,整数部分除二取余法,4(十进制)=100(二进制);

小数部分则不断乘以2,然后取整数部分(0和1都保留),然后再用剩余小数部分继续乘以2,直至小数部分为0;

0.25*2=0.5,取0;0.5 * 2 = 1.0,取1。则小数部分为.01

综合4.25(十进制) = 100.01

2、二进制转十进制

整数部分和小数部分分开算,100 (二进制)= 22=4(十进制);

.01(二进制) = 2-2=1/4=0.25(二进制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值