首页 > 解决方案 > 如何将int类型转换为ieee754?

问题描述

我在采用整数类型后尝试打印出 IEEE754,但它没有为我显示正确的答案。我想在 main 方法中将整数传递给函数“void ieee(int x)”,然后它将打印出 IEEE754 格式。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int binary(int n, int i) 
{
    int k;
    for (i--; i >= 0; i--)
   {
      k = n >> i;
      if (k & 1)
      printf("1");
      else
      printf("0");
    }
}

typedef union
{
  int f;
  struct
  {
        unsigned int mantissa : 23;
        unsigned int exponent : 8;
        unsigned int sign : 1;
   } field;
} myfloat;

void ieee(int x)
{

int i;

myfloat var = (myfloat)x;



printf("%d ",var.field.sign);

binary(var.field.exponent, 8);
printf(" ");

binary(var.field.mantissa, 23);
printf("\n");
}

int main()
{
int x = 3;
ieee(x);

return 0;       
 }

标签: cieee-754

解决方案


您正在 aintstruct持有 a 的内部表示的类型之间进行类型双关语float

这会给你错误的答案。

如果您想知道整数的浮点表示,可以通过对 进行先前的强制转换来获得正确的结果float

int x = 3;
myfloat var;
var.f = (float)x; 
binary(var.field.exponent, 8);
binary(var.field.mantissa, 23);

此外,考虑到不能假设 IEEE 浮点表示被用于float.
例如,请参阅此链接:

__STDC_IEC_559__

另一方面,位域不一定在所有实现中都是连续的。

请参阅位域的缺点


推荐阅读