Приведение числа с плавающей точкой к int (поразрядно) в C

Учитывая 32 бита, которые представляют число с плавающей точкой IEEE 754, как можно преобразовать число в целое число, используя целочисленные или битовые операции с представлением (вместо использования машинной инструкции или операции компилятора для преобразования)?

У меня есть следующая функция, но в некоторых случаях она не работает:

Вход: int x (содержит 32-битное число одинарной точности в формате IEEE 754)

  if(x == 0) return x;

  unsigned int signBit = 0;
  unsigned int absX = (unsigned int)x;
  if (x < 0)
  {
      signBit = 0x80000000u;
      absX = (unsigned int)-x;
  }

  unsigned int exponent = 158;
  while ((absX & 0x80000000) == 0)
  {
      exponent--;
      absX <<= 1;
  }

  unsigned int mantissa = absX >> 8;

  unsigned int result = signBit | (exponent << 23) | (mantissa & 0x7fffff);
  printf("\nfor x: %x, result: %x",x,result);
  return result;

Ответы на вопрос(7)

Ваш ответ на вопрос