我必须用浮点数表示一个二进制数。 我有一个十六进制数FFFF,当我将该十六进制数转换为Binary时,我得到的对应二进制数为1111111111111111。我的Intel处理器使用的存储格式是32位表示1位表示符号,8位表示指数,尾数为23位。 我有一些主意但是很困惑。 有人可以帮我解决这个二进制数对应的浮点值吗?
如果我的二进制数为1111111111111111并且Intel处理器使用的存储格式为32位,则float的值是什么? [关闭]
What will be the value in float if I have a binary number as 1111111111111111 and the storage formats used by Intel processors is 32 bits? [closed]
===============>>#1 票数:4
32个
只需尝试一下:
#include <stdio.h>
int main() {
union {
unsigned i;
float f;
} u;
u.i = 0xffffffff;
printf("%f\n", u.f);
return 0;
}
打印-nan
。 此实验假设您实际上要0xffffffff
而不是0xffff
作为问题陈述。
查看http://en.wikipedia.org/wiki/Single_precision,您会发现指数0xFF
与非零有效数字一起被视为NaN。
16个
如果您确实是在0xFFFF
之后,如您的问题所写,那么代码将输出0.000000
,但是将%f
更改为%g
您将获得9.18341e-41
。 这是因为整数和浮点数都使用相同的字节序,即,您所讨论的浮点数对应于位模式0x0000ffff
。
在那里,您将看到零符号(即正数),零指数和非零有效数。 根据同一维基百科的文章,这表示一个不正常的数字 。 所以这实际上是0xffff∙2 −149 = 65535∙2 −149 。
===============>>#2 票数:3
假设IEEE-754 32位浮点数为0xFFFFFFFF
( 0xFFFFFFFF
32个):
第一个是符号,所以它是负浮点数。 然后是指数,因为它是最大值,所以它是“特殊”指数。
因为有效NaN
不为零,所以结果为NaN
。
资料来源: Wikipedia 。
如果您只想要16个,则:
显然,MvG并非如此。
假设其余位为零,则输入为0x0000FFFF
。 第一位是符号,为零。 因此,我们有一个积极的浮动。
然后我们有8位的指数。 由于它们全为零,因此我们将根据零分获得零或次正规数。
由于分数不全为零,因此该浮点数是次正规数。
至此,我们已经检查了9位,因此仍然有7个额外的零。
分数由7个零组成,后跟16个零,因此有效0.00000001111111111111111
为(二进制) 0.00000001111111111111111
。 将其乘以2e-126
,您将得到答案。
结果显然是9.18341e-41
。