所以,在CI我试图给一个浮点变量一个二进制位(或十六进制数字)的数字,然后打印出来,但它不想打印我手工计算或在线计算的数字转换器。
float x = (float) 0b01000001110010000000000000000000;
或
float x = (float) 0x41C80000;
使用
打印时printf("%f", x);
产生如下结果:
1103626240.000000
而不是预期的25,由于符号位为0,指数位为131,并且分数为1.5625。
为什么会这样,我怎样才能得到我想要的结果?
答案 0 :(得分:3)
十六进制中的值0x41C80000
是一个十进制值1103626240
的整数。在您的代码中,您将此值转换为float
,从而为您提供此结果:
x = 1103626240.000000
可以使用union
:
union uint_to_float {
unsigned int u;
float f;
};
union uint_to_float u2f;
u2f.u = 0x41C80000;
printf("x = %f\n", u2f.f);
修改强>
正如@chux所提到的,使用uint32_t
中的stdint.h
代替unsigned int
是更好的解决方案。