|
void test()
{
unsigned long i;
lp=&fa;
zf=*lp&0x80000000; //取數(shù)符號(hào)
pianyi=((*lp&0x7F800000)>>23)-0x7f; //取二進(jìn)制偏移量
pyzf=pianyi&0x80; //指數(shù)偏移方向,1向小數(shù)偏,0向整數(shù)偏
xiaoshu=(*lp&0x7FFFFF)|0x800000; //取數(shù)部分
if(pianyi>23)
{//純整數(shù)計(jì)算
zhengshu=xiaoshu; //全部做整數(shù)處理
xiaoshu=0; //小數(shù)為0
}
else if(pianyi<-1)
{//純小數(shù)計(jì)算
zhengshu=0; //全部做小數(shù)處理,整數(shù)為0
}
else
{//復(fù)合計(jì)算
temp2=23-pianyi; //計(jì)算整數(shù)個(gè)數(shù)
zhengshu=xiaoshu>>temp2; //取整數(shù)
temp2= pianyi+1; //計(jì)算小數(shù)個(gè)數(shù)
xiaoshu&=(0xFFFFFF>>temp2); //取小數(shù)
}
//小數(shù)翻轉(zhuǎn)
i=0x800000>>temp2; //定位取數(shù)數(shù)i的位置
temp3=xiaoshufanzhuan; //載入小數(shù)轉(zhuǎn)整數(shù)的位權(quán)
temp1=0; //清空容器,準(zhǔn)備累加
while(i)
{//如果取數(shù)數(shù)i沒(méi)有到最低位
if(xiaoshu&i) temp1+=temp3; //如果取數(shù)數(shù)i取出位為1,當(dāng)前位開(kāi)始取位權(quán)累加
temp3>>=1; //位權(quán)數(shù)整除2
i>>=1; //取數(shù)數(shù)i整除2,向低位移動(dòng),直到移出數(shù)據(jù)
}
xiaoshu=temp1; //累加結(jié)構(gòu)給小數(shù)容器
if(zf)
{
ftoas[0]=0x2d;
}
else
{
ftoas[0]=0x2b;
}
}
|
|