C中printf()的格式说明符%a

时间:2011-01-28 09:53:51

标签: c printf

我正在阅读一本C语言书,它说%f, %e, %g, %a是用于floatdouble数据类型的printf字符。目前,我完全可以理解%f, %e, %g

我何时需要使用%a打印floatdouble类型数据?

你能告诉我一个例子。

2 个答案:

答案 0 :(得分:35)

%a格式说明符是C99中的新增内容。它以十六进制形式打印浮点数。这不是您用来向用户提供数字的东西,但它对于引擎盖/技术用例非常方便。

例如,这段代码:

printf("pi=%a\n", 3.14);

打印:

pi=0x1.91eb86p+1

评论中链接的优秀文章解释说,这应该是“1.91EB86 16 * 2 1 ”(即{{1} } {是p浮点数被提升为)。在这种情况下,“1.91EB86 16 ”是“1.5700000524520874 10 ”。乘以“2 1 ”,得到“3.140000104904175 10 ”。

请注意,这也具有保留所有精度的有用属性,并以健壮的方式呈现它们。

答案 1 :(得分:6)

至于您希望使用十六进制表示的原因示例,您可能希望使用%a来精确表示发送到另一台计算机进行处理的浮点值。

我们目前正在使用它来对嵌入式控制器进行单元测试,方法是通过UART将模拟传感器和执行器的模拟工厂模型发送到嵌入式处理器,其中嵌入式处理器执行控制处理并返回反馈(同样, float表示为%a)返回工厂模型以关闭循环。