将int重新解释为float

时间:2018-05-10 08:34:11

标签: c

我试图通过设置它的位来创建一个浮点数。 我在这里读到可能最好的方法是使用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.

有人可以解释浮动值为零的原因吗?

1 个答案:

答案 0 :(得分:3)

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