C语言中float类型在内存中的表示

原帖地址:点击打开链接

一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。

1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数.

2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码. 
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.

3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数.


例:将十进制20.59375表示成机器内的32个字节的二进制形式.

第一步:将20.59375表示成二进制数:10100.10011; 
第二步:将二进制形式的浮点实数转化为规格化的形式:(小数点向左移动,使其在第1,2位之间) 
10100.10011=1.010010011*2^4,所以;
符号位:该数为正数,故第31位为0,占一个二进制位. 
阶码:因为指数为4,故其阶码为127+4=131=10000011
尾数:为小数点后的部分, 即010010011,记住,整数部分的1隐藏,不用表示在内存里面的,因为尾数共23个二进制位,所以低位补0,即010010011后面补14个0,即01001001100000000000000
所以20.59375在内存中的实际表示方式为: 
0 10000011 01001001100000000000000

例:1.0在内存中的表示是:3f800000;

         0.0在内存中的表示是:0000000.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值