我正在尝试打印浮点值 0x40a00000 和 0xc0200000。但是我打印出来的值和根据 IEEE-754 浮点转换器的正确值(https://www.h-schmidt.net/FloatConverter/IEEE754.html)完全不同:
根据 IEEE 转换器我应该得到的值:
0x3F800000 = 5.00
0xBF000000 = -2.50
我运行时得到的值:
float tmp1 = 0x40a00000;
float tmp2 = 0xc0200000;
printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);
is
tmp1 = 1084227584.00
tmp2 = 3223322624.00
由于某种原因,我的 C 代码没有根据 IEEE 标准格式化浮点值的位,而是将它们格式化为带有小数点的 int
这些将十六进制数的浮点表示分配给浮点。
相反,请执行以下操作:
int i1 = 0x40a00000;
int i2 = 0xc0200000;
float tmp1, tmp2;
memcpy(&tmp1, &i1, sizeof(int));
memcpy(&tmp2, &i2, sizeof(int));
打印它们:
printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);
Output:
tmp1 = 5.00
tmp2 = -2.50
完整示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
int i1 = 0x40a00000;
int i2 = 0xc0200000;
float tmp1, tmp2;
memcpy(&tmp1, &i1, sizeof(int));
memcpy(&tmp2, &i2, sizeof(int));
printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)