标题: 小数翻转 [打印本页]

作者: hujia    时间: 2015-2-18 01:17
标题: 小数翻转
void test()
{
    unsigned long i;
    lp=&fa;
    zf=*lp&0x80000000;                   //取数符号
    pianyi=((*lp&0x7F800000)>>23)-0x7f;  //取二进制偏移量
    pyzf=pianyi&0x80;                    //指数偏移方向,1向小数偏,0向整数偏
    xiaoshu=(*lp&0x7FFFFF)|0x800000;     //取数部分
    if(pianyi>23)
    {//纯整数计算
        zhengshu=xiaoshu;                //全部做整数处理
        xiaoshu=0;                       //小数为0
    }
    else if(pianyi<-1)
    {//纯小数计算
        zhengshu=0;                      //全部做小数处理,整数为0
    }
    else
    {//复合计算
        temp2=23-pianyi;                 //计算整数个数
        zhengshu=xiaoshu>>temp2;         //取整数
        temp2= pianyi+1;                 //计算小数个数
        xiaoshu&=(0xFFFFFF>>temp2);      //取小数
    }
    //小数翻转
    i=0x800000>>temp2;                   //定位取数数i的位置
    temp3=xiaoshufanzhuan;               //载入小数转整数的位权
    temp1=0;                             //清空容器,准备累加
    while(i)
    {//如果取数数i没有到最低位
        if(xiaoshu&i) temp1+=temp3;      //如果取数数i取出位为1,当前位开始取位权累加
        temp3>>=1;                       //位权数整除2
        i>>=1;                           //取数数i整除2,向低位移动,直到移出数据
    }
    xiaoshu=temp1;                       //累加结构给小数容器



if(zf)
{
            ftoas[0]=0x2d;
}
else
{
            ftoas[0]=0x2b;
}
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1