C 提供带二进制位的 float 会产生错误的数字

标签 c floating-point binary hex

所以,在 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/

相关文章:

c++ - C99 和 C++ 的内联函数的兼容定义

c - 你好,我正在编写一个 C 程序来获取给定字符串中字符的位置

c# 字符串到 float 的转换无效?

java - 为什么有些 float 出现尾随 0

算法帮助 : Calculate binary possibilities whilst ignoring zero bits

c# - CRC-16 0x8005 多项式,从 C 到 C#。紧急求救

c - 为什么我的函数会产生冲突类型错误?

floating-point - 8 位 float 的 float 转换

python - 在 Python 中搜索/读取二进制数据

sql - 使用二次幂的数据库数据结构