由浮点数x的位级表示求其整型值
由浮点数x的位级表示,得到浮点数的十进制表示,在超过32位整型数的表示范围时,返回0X80000000;在32位整型数的表示范围内时,返回强制转化为整型的值。舍入时采用向0舍入。
程序代码
typedef unsigned long int float_bits;
#define u32 unsigned long int
long int float_f2i(float_bits f);void main()
{static float_bits f1=0xc0490fdb,f2=0x40490fdb;long int xf1,xf2;xf1=float_f2i(f1);xf2=float_f2i(f2);while(1);
}
long int float_f2i(float_bits f)
{u32 sign,exp,frac;long int xli,E,i=1;//int E;float M,V;sign=f>>31;exp=f>>23&0xff;frac=f & 0x7fffff;if(exp==255)xli=0x80000000;else if(exp==0)xli=0;else {E=exp-127;M=1+frac*1.0/(i<<23);if(E<0)V=1.0/(1<<(0-E))*M;elseV=(i<<E)*M; if(sign==0){if(V>((i<<31)-1))xli=0x80000000;else xli=(long int)V;}else{V=0-V;if(V<(0-(i<<31)))xli=0x80000000;elsexli=(long int)V;} }return xli;}
运行结果
f1=0xc0490fdb是-3.14159274的浮点型位级表示;f2=0x40490fdb是3.14159274的浮点型位级表示; xf1=0xfffffffd是-3的长整型表示;xf2=0x00000003是3的长整型表示。