Учитывая 32 бита, которые представляют число с плавающей запятой IEEE 754, как можно преобразовать число в целое число, используя целочисленные или битовые операции над представлением (вместо использования машинной команды или операции компилятора для преобразования)?
ИЗМЕНИТЬ № 1:
Мне нужно выполнить следующую функцию, но в некоторых случаях она терпит неудачу:
Вход: 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;
ИЗМЕНИТЬ № 2:
Также нужна помощь с помощью https://cs.stackexchange.com/info/3484/converting-function-to-bitwise-only