各位C语言高手,帮忙解释一下这个程序把

来源:百度知道 编辑:UC知道 时间:2024/05/09 18:04:31
能帮忙解释一下这个程序吗?特别是:
hex = *(long *)&convert;这句您能详细解释一下吗!!!
万分感谢!!!

用C语言编写浮点转16进制:
int main()
{
double input;
float convert;
long hex;
int i;
printf("输入需要转换的数:\n");
scanf("%lf",&input);
convert = (float)input;
hex = *(long *)&convert;
printf("二进制值:\n");
printf("%d ",(hex&0x80000000)==0?0:1);
for(i=30;i>=23;--i)
printf("%d",(hex>>i) & 1);
printf(" ");
for(i=22;i>=0;--i)
{ printf("%d",(hex>>i) & 1);
}
printf("\n十六进制值:\n%08lX\n",hex);
system("pause");
return 0;
}

过程:
从用户取得double型数据输入
强转到float型
再强转到long型
打印long中的第一部分,对应float在内存中的存储方法
打印第二部分
打印long的值
hex = *(long *)&convert;相当于memcpy(&hex,&conver,sizeof(hex));

hex = *(long *)&convert;
首先&convert是convert的地址,即float型的指针。
然后(long *)强制类型转化成long型指针。
最后取这个地址所指向的值赋给hex。