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

*C语言中浮点数在内存中的存储方式*
C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?
float在内存中的存储方式如下图所示:
这里写图片描述
double在内存中的存储方式如下图所示:
这里写图片描述
无论是单精度还是双精度在存储中都分为三个部分:
1.符号位(Sign) : 0代表正,1代表为负
2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
3.尾数部分(Mantissa):尾数部分

首先来看float类型(以2.25为例)

步骤一:符号位(占1个bit位)的数值
很容易看出此数为正数,因此符号位为0。
步骤二:指数位(占8个bit位)的数值
第一步:先将十进制的2.25转换成二进制0100.01;
第二步:将100.01用二进制的科学计数法表示为1.001;
第三步:将第二步所得数值写成指数形式1.001*(2^2);
第四步:将指数数值2+127=129,将129转化成二进制形式(1000 0001)写到指数部位。
步骤三:尾数部分(占23个bit位)的数值
将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。
所以单精度浮点数2.25在内存中的表示方式为:
0 1000 0001 00100000000000000000000

        再来看double类型(还是以2.25为例)

步骤一:符号位(占1个bit位)的数值
很容易看出此数为正数,因此符号位为0。
步骤二:指数位(占11个bit位)的数值
第一步:先将十进制的2.25转换成二进制0100.01;
第二步:将100.01用二进制的科学计数法表示为1.001;
第三步:将第二步所得数值写成指数形式1.001*(2^2);
第四步:将指数数值2+1023=1025,将129转化成二进制形式(100 0000 0001)写到指数部位。
步骤三:尾数部分(占52个bit位)的数值
将步骤二第二步中所得的数1.001,小数点后的三位数001写到指数部位,剩下的位用0补齐即可。
所以双精度浮点数2.25在内存中的表示方式为:
0 100 0000 0001 0010000000000000000000000000000000000000000000000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值