C语言深入探讨实战篇之float类型表示(三)

本文详细解析了C语言中浮点数float的内部表示方法,包括符号位、指数位和尾数位的具体构成,以及如何通过这些部分计算出具体的浮点数值。并通过两个实例演示了如何将二进制形式的float转换成实际的小数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言中需要用到小数的时候就要引入存小数的变量,小数在C语言中叫浮点数,按精度来划分,类型有两种:

单精度浮点数float、双精度浮点数double

不同的编译环境这两种类型可能占用的字节数有所不同,在VC中float类型占用4个自己,double占用8个字节

在Keil当中float类型也是4个字节,但double这个字节也只有4个字节(实际上和float没有任何区别,精度范围都一样,连内部表示方法都一模一样,至于为什么要在Keil中搞出2个一样的东西,原因是double毕竟是标准C语言中的一种数据类型,所以编译的时候不能不支持,用这个类型符合定义的变量不能报错,但是51单片机毕竟存变量的RAM很小,如果动不动8个字节伤不起,所以采用4个字节)。具体测试方法请参照C语言深入探(二)。

下面重点讨论float通过4个字节怎么表示出小数:

例子一:

32位(0-31):最左边位(第33位)为符号位,0表示正,1表示负数

第32-24位为指数位,共1个字节(8位)值为A,用来表示指数,2^(A-127)

最右边的23位数(第0-22位)比较特殊,从左往右边算值为B,作为小数部分1.0+2^-B

所以公式是(-1)^s * (1.0+2^-B) * 2^(A-127)

这么说可能理解还不具体,下面两个例子:

1 01111111 10000000000000000000000 刚好3部分

最左边1表示为负数,s=1;01111111表示指数是A=127

10000000000000000000000,从左往右边算所以是B=1

代入公式:(-1)^1 * (1.0+2^-1) * 2^(127-127)=-1.5

例子二:

1 10000001 01000000000000000000000

如果是float的码,又是多少?

s=1

A=129

B=2^1=2

代入公式:

:(-1)^1 * (1.0+2^-2) * 2^(129-127)=-5

验证代码:
C语言深入探讨实战篇之float类型表示(三)
上面的代码是在Keil软件中测试的,如果是在VC中会怎样呢?因为VC中是小端模式(不明白请看以前的章节)

所以-5的4个字节顺序不再是C0 A0 00 00 而是 00 00 A0 C0

-1.5的4个字节顺序不再是BF C0 00 00 而是 00 00 C0 BF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值