所以,在 C 中,我试图给一个浮点变量一个二进制位(或十六进制数字)的数字,然后打印出来,但是它不想打印我手工或在线计算的数字转换器。
float x = (float) 0b01000001110010000000000000000000;
或
float x = (float) 0x41C80000;
打印时使用
printf("%f", x);
产生这样的结果:
1103626240.000000
而不是预期的 25,因为符号位为 0,指数位为 131,小数为 1.5625。
这是为什么,我怎样才能得到我想要的结果?
最佳答案
十六进制值 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 所提到的,使用 stdint.h
中的 uint32_t
而不是 unsigned int
是更好的解决方案。
关于C 提供带二进制位的 float 会产生错误的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49910345/