浮点数的位级表示转变为二进制表示
把x的浮点数的位级表示转变为二进制表示,并确定小数点的位置。
程序代码
typedef unsigned long float_bits;typedef struct {long int y; // 二进制小数表示int decp; // 小数位位置
} str;void bitlevel_binaryfract(float_bits x,str *p);void main()
{str s1;float_bits x;long int m=1;float fx;x=0x40490fdb; // 浮点数位级表示bitlevel_binaryfract(x,&s1);fx=s1.y>>s1.decp;fx=fx+(s1.y&((m<<s1.decp)-1))*1.0/(m<<s1.decp);while(1);
}void bitlevel_binaryfract(float_bits x,str *p)
{unsigned long sign,exp,frac,i=1;int j;long int E;sign=x>>31;exp=x>>23&0xff;frac=x & 0x7fffff;if(exp==0)frac=0;j=23;while(frac!=0) //j为最右边1的位置{if((frac&0x1)==1)break;elsej--;frac>>=1;}frac=frac|(i<<j);E=exp-127;if(E>=0)p->decp=j-E;elsep->decp=j-E;p->y=frac;
}
说明:x=0x0x40490fdb是的近似浮点数位级表示。
运行结果
fx=3.14159274。