十进制浮点数的二进制转换及存储

网上看到一道小题:

int main(void) 
{
float a = 10.0;

double b = 10.0;

printf( "%d\n", a );

printf( "%d\n", b );

return 0;

}

输出结果a,b均为0。

这道小题是一个很好的面试题,考查面试者对浮点数存储的理解。


十进制小数的二进制表示:

整数部分:除以2,取出余数,商继续除以2,直到得到0为止,将取出的余数逆序

小数部分:乘以2,然后取出整数部分,将剩下的小数部分继续乘以2,然后再取整数部分,一直取到小数部分为零为止。如果永远不为零,则按要求保留足够位数的小数,最后一位做0舍1入。将取出的整数顺序排列。

举例:22.8125 转二进制的计算过程:

整数部分:除以2,商继续除以2,得到0为止,将余数逆序排列。
22 / 2  11 余0
11/2     5  余 1
5  /2      2  余 1
2  /2      1  余 0
1  /2      0  余 1
得到22的二进制是10110


小数部分:乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,

得到0.8125的二进制是0.1101

结果:十进制22.8125等于二进制00010110.1101


浮点数的计算机存储:

IEEE 754标准中所定义的单精度32位浮点数和双精度64位浮点数的格式:

32位单精度

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值