有熟悉IEEE单精度表法转换的吗 ?(100分)

  • 主题发起人 主题发起人 ccweifen
  • 开始时间 开始时间
C

ccweifen

Unregistered / Unconfirmed
GUEST, unregistred user!
如收到的16进制的字符型 42D651CF , 转换成浮点数后是 107.1598 ,
看了些资料 , 自已手动会计算了 ,但不知道怎么用Delphi来做出来?
 
//找了以下一段代码 , 用C写的,哪位熟悉C的能否翻可 D的 ?

先将 42D651CF 分解到 一个 Byte[4]的数组中 , 42 D6 51 CF

float CUllageDlg::flotodec(BYTE byte[4])
{//单精度浮点数共32位,第1位为符号位s,后8为指数位e,最后23位为尾数bit
float v,m1=0,m2=0,m=0;
int s,e,bit1,bit2;
BYTE byt[4]={byte[0],byte[1],byte[2],byte[3]};

s=byt[0]>>7;

e=byt[0]<<1|byt[1]>>7;
for(int i=1;i<8;i++)
{
bit1=byt[1]>>(7-i)&0x01;
m1+=bit1*(1/pow(2.0f,i));
bit2=byt[2]>>(8-i)&0x01;
m2+=bit2*(1/pow(2.0f,i+7));
}
m=m1+m2;
if(e==0)
{
v=pow(-1.0f,s)*pow(2.0f,(-126))*m;

}

if(e!=0&&e!=0xff)
{

v=pow(-1.0f,s)*pow(2.0f,(e-0x7f))*(1+m);

}//if

return v;
}
 
结果出来了,但不是很明白 ,

e=byt[0]<<1|byt[1]>>7;
我把它翻成 e :=byt[0] shl 1 or byt[1] shr 7;
测试了几个值是对的, 哪个能不能解释一下 。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部