Fundição float int (bit a bit) em C

Dados os 32 bits que representam um número de ponto flutuante IEEE 754, como o número pode ser convertido em um inteiro, usando operações inteiras ou de bit na representação (em vez de usar uma instrução de máquina ou operação de compilador para converter)?

Eu tenho a seguinte função, mas falha em alguns casos:

Entrada: int x (contém um número de precisão simples de 32 bits no formato 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;

questionAnswers(7)

yourAnswerToTheQuestion