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

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

我什么时候需要使用%a来打印floatdouble类型的数据?

你能告诉我一个例子吗?

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

作为示例,此代码:

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

打印:

 pi=0x1.91eb86p+1 

评论中链接的优秀文章解释说,这应该被理解为“1.91EB86 16 * 2 1 ”( 也就是说, p代表浮点数被提升到power-of-twopower-of-two )。 在这种情况下,“1.91EB86 16 ”是“1.5700000524520874 10 ”。 乘以“2 1 ”,得到“3.140000104904175 10 ”。

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

至于为什么要使用hex表示的示例,您可能希望使用%a来精确表示发送到另一台计算机进行处理的浮点值。

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