我正在编写一个使用位运算将整数转换为浮点数的函数。 我不明白为什么我的代码不能适用于所有输入。例如,它适用于2、19、43等数字,但对于7、6、13、58等数字,则输出-nan。能否有人解释一下这是为什么?谢谢。以下是我的代码:
#include <stdio.h>
typedef union{
int x;
float fx;
}df;
int find_e(int x,int i){
if(x&1<<i) return i;
if(x==0) return -127;
return find_e(x,--i);
}
float int_to_float(int x){
df ime;
ime.x=0;
int sign = 0;
if(x<0){x=-x;sign = 1<<31; }
int position = find_e(x,31);
int e = position + 127;
int m = (x&(~(~0<<position)))<<(32-position);
ime.x |= sign;
ime.x |= e<<23;
ime.x |= m>>9;
return ime.fx;
}
int main()
{
int x;
scanf("%d",&x);
printf("%f\n", int_to_float(x));
return 0;
}
我使用gcc编译器。
INT_MIN
失败。对于大的int
,也不能正确地四舍五入。但作为一项练习已经足够了。 - chux - Reinstate Monica