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请多多指教
展开
 我来答
百度网友1fc36d4
推荐于2016-07-22 · TA获得超过3129个赞
知道大有可为答主
回答量:1497
采纳率:100%
帮助的人:1825万
展开全部
楼上的方法可以。不过若是换成了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;
}
百度网友76bc4363f
2012-09-20 · TA获得超过1019个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:258万
展开全部
用这个试试printf("%f\n%x\n%f\n", f, *(int *)&f, f);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式