将 int 重新解释为浮点数



我正在尝试通过设置其位来创建浮点数。 我在这里读到,最好的方法可能是使用memcpy。 这就是我正在使用的代码

#include <stdio.h>
#include <string.h>
float i2f(int i) {
float result;
memcpy(&result, &i, sizeof(int));
return result;
}
int main() {
printf("Size of int is %d.n", sizeof(int));
printf("Size of float is %d.n", sizeof(float));
int i = 0x7fffff;
float f = i2f(i);
printf("int value is %d.n", i);
printf("float value is %f.n", f);
return 0;  
}

我得到的输出是

Size of int is 4.
Size of float is 4.
int value is 8388607.
float value is 0.000000.

有人可以解释为什么浮点值为零吗?

整数位0x7fffff编码非常小的float值,小于 2−126%f转换说明符不会生成足够的数字来显示值。使用%g%e或指定更多数字,例如%.99f

最新更新