C++中如何把float型的实际十六进制值输出来?
floatf=123.456f;printf("%f\n%X\n%f\n",f,f,f);输出为:123.456001200000000.000000第二、三行是怎么回事...
float f = 123.456f;
printf("%f\n%X\n%f\n", f, f, f);
输出为:
123.456001
20000000
0.000000
第二、三行是怎么回事?为什么用%X输出一遍后再用%f就变成0了,但再写一条printf仍然正常?如何把f的十六进制值输出来?小弟不会用printf请多多指教 展开
printf("%f\n%X\n%f\n", f, f, f);
输出为:
123.456001
20000000
0.000000
第二、三行是怎么回事?为什么用%X输出一遍后再用%f就变成0了,但再写一条printf仍然正常?如何把f的十六进制值输出来?小弟不会用printf请多多指教 展开
2个回答
展开全部
楼上的方法可以。不过若是换成了double,则强制转换为int会截断数据了
可以使用逐字节输出
#include <stdio.h>
int main()
{
double df = 123.456;
float f = 123.456f;
unsigned char *p;
int i;
/*输出float*/
printf("测试float f=123.456f\n");
printf("%f\n%X\n%f\n", f, f, f);
printf("%f\n%X\n%f\n", f, *(int *)&f, f);
printf("逐字节输出");
p=(unsigned char *)&f;
for(i=sizeof(f)-1;i>=0;i--)
{
printf("%02X",p[i]);
}
printf("\n\n");
/*输出double*/
printf("测试double df=123.456\n");
printf("%f\n%X\n%f\n", df, df, df);
printf("%f\n%X\n%f\n", df, *(int *)&df, df);
printf("逐字节输出");
p=(unsigned char *)&df;
for(i=sizeof(df)-1;i>=0;i--)
{
printf("%02X",p[i]);
}
printf("\n");
getchar();
return 0;
}
可以使用逐字节输出
#include <stdio.h>
int main()
{
double df = 123.456;
float f = 123.456f;
unsigned char *p;
int i;
/*输出float*/
printf("测试float f=123.456f\n");
printf("%f\n%X\n%f\n", f, f, f);
printf("%f\n%X\n%f\n", f, *(int *)&f, f);
printf("逐字节输出");
p=(unsigned char *)&f;
for(i=sizeof(f)-1;i>=0;i--)
{
printf("%02X",p[i]);
}
printf("\n\n");
/*输出double*/
printf("测试double df=123.456\n");
printf("%f\n%X\n%f\n", df, df, df);
printf("%f\n%X\n%f\n", df, *(int *)&df, df);
printf("逐字节输出");
p=(unsigned char *)&df;
for(i=sizeof(df)-1;i>=0;i--)
{
printf("%02X",p[i]);
}
printf("\n");
getchar();
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询