谁帮我看看这段C代码是啥意思?(10分)

L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
谁帮我看看这段C代码是啥意思?

我这里有段C代码,不太明白意思,好象是转换浮点数的。
哪位老大给解释一下?
我想在DELPHI里用,谁能帮我该该吗?




S51float FtoS(float f)
{
S51float Sf;
unsigned int temp;
float ftemp;
char exp;
Sf.Exp=Sf.Dflag=Sf.HVal=Sf.LVal=0;
if (f==0)
return(Sf);
if (f<0)
SSf.Dflag=1;
else Sf.Dflag=0;
if (f<0)
f=-f;;
ftemp=f;
exp=0;
if (ftemp>=1)
while(ftemp>=1) {
exp ++;
ftemp=ftemp/2.0;
}
else {
while (ftemp<1) {
exp --;
ftemp=ftemp * 2;
exp = exp + 1;
}
exp +=128;
Sf.Exp=exp;
ftemp=ftemp*65536;
temp=(unsigned int)ftemp;
Sf.HVal = (unsigned char)(temp/256);
Sf.LVal = (unsigned char)(temp%256);
return(Sf);
}

typedef struct {
signed exp:7;
unsigned Dflag:1;
unsinged HVal:8;
unsinged LVal:8;
}S51float;
 
好像一个鸡鸡歪歪的算法,然后将FLOAT型转为STRING型的函数
 
将Float转换成s51float
dflag是正负
Hval为高8位
Lval为高8位
 
delphi中有FloatToStr函数。
 
哦,能说的具体一点吗
 
sorry,没细看,好像你的要求和FloatToStr不一样。
 
主程序中调用了什么头文件?这个函数里面有些属性没见过呀
 
它的功能是将一个实数转化为二进制数
如将4转化为1000000000000000,此时 exp为3(exp为7位,128+exp溢出,结果为exp) ,取前三位。刚好为4


不一定对,希望高手指点!
 
这个程序有几个地方不明白
1.
while (ftemp<1) {
exp --;
ftemp=ftemp * 2;
exp = exp + 1;
}
什么意思先减1再加1
char类型范围[-128,127] +128后再赋给范围是[0,127]的变量。
----------------------------------
不过还是不影响阅读的,因为假设这个程序没有错误。
结果为 精度为十六位的浮点数[科学计数法] f=0.XXX * 2**Exp
^Hval,Lval
dflag是正负
Hval为(有效值的高8位)
Lval为(有效值的低8位)
Exp 是表示指数。
 
dflag是正负
Hval为高8位
Lval为高8位
 
收到!!!
 
顶部