符号位保留,中间8位减96(1100000)再去掉最高2位就成是中间6位,然后小数位取原23位中前9位。再将此2进制表示法转成16进制即可。
这就是32位浮点数转成16位的规律,可是C语言不能对浮点数进行移位操作啊,各位帮忙。
[此贴子已经被作者于2007-8-29 10:02:40编辑过]
写好了,代码如下:
#include <stdio.h>
int main()
{
double input;
float convert;
long hex;
int i;
int s[4];
int se[16];
char b[4];
printf("输入要转换的浮点数:\n");
scanf("%lf",&input);
convert = (float)input;
hex =*(long*)&convert;
se[15]=((hex&0x80000000)==0?0:1);
hex=hex+0x50000000;
se[0]=((hex>>28)&1);
se[1]=((hex>>27)&1);
se[2]=((hex>>26)&1);
s[0]=se[15]*8+se[0]*4+se[1]*2+se[2];
se[3]=((hex>>25)&1);
se[4]=((hex>>24)&1);
se[5]=((hex>>23)&1);
se[6]=((hex>>22)&1);
s[1]=se[3]*8+se[4]*4+se[5]*2+se[6];
se[7]=((hex>>21)&1);
s[2]=s[2]+se[7]*8;
se[8]=((hex>>20)&1);
s[2]=s[2]+se[8]*4;
se[9]=((hex>>19)&1);
se[10]=((hex>>18)&1);
s[2]=se[7]*8+se[8]*4+se[9]*2+se[10];
se[11]=((hex>>17)&1);
se[12]=((hex>>16)&1);
se[13]=((hex>>15)&1);
se[14]=((hex>>14)&1);
s[3]=se[11]*8+se[12]*4+se[13]*2+se[14];
for(i=0;i<4;i++)
{
switch(s[i])
{
case 10: b[i]='a';break;
case 11: b[i]='b';break;
case 12: b[i]='c';break;
case 13: b[i]='d';break;
case 14: b[i]='e';break;
case 15: b[i]='f';break;
default :b[i]=s[i]+48;break;
}
}
printf("十六位十六进制为:0x%c%c%c%c",b[0],b[1],b[2],b[3]);
system("pause");
return 0;
}