c语言整数转单浮点数输出变大了?

uint最大整数根据I3E转成单精度浮点后16进制是0x4F7FFFFF,再转回整数是4294967040
为什么输出反而变大了?

#include <stdio.h>
int main(void) {
    float f1 = 0xffffffff;
    unsigned int umax = 0xffffffff;
    printf(" u is:%u\n",umax); // u is:4294967295
    printf("f1 is:%f\n",f1); //f1 is:4294967296.000000
    return 0;
}
阅读 3k
3 个回答

浮点数一般是 IEEE754 表示的,很多时候是不精确的。

这位同学,因为浮点数的精度是不够的,因此int更加准确

IEEE 754 单精度浮点数共 32 比特,构成如下:

\( value = (-1)^{sign} \times 2^{exponent} \times (1+fraction) \)

也就是浮点数的实际值,等于符号位(sign bit)乘以指数偏移值(exponent bias)再乘以分数值(fraction)。

  • 其中 sign 占用1比特
  • exponent 是指数,占用8比特
  • fraction 是尾数的一部分,占用23比特

这个格式表达不了 0xffffffff 这样的值,所以float用了近似值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题