C中printf()的格式说明符%a
我正在阅读一本C语言书,它说%f, %e, %g, %a
是用于float
和double
数据类型的printf字符。 目前我完全可以理解%f, %e, %g
。
我什么时候需要使用%a
来打印float
和double
类型的数据?
你能告诉我一个例子吗?
格式说明符%a
是C99中的新增内容。 它以hexforms打印浮点数。 这不是您用来向用户提供数字的东西,但它对于引擎盖/技术用例非常方便。
作为示例,此代码:
printf("pi=%a\n", 3.14);
打印:
pi=0x1.91eb86p+1
评论中链接的优秀文章解释说,这应该被理解为“1.91EB86 16 * 2 1 ”( 也就是说, p
代表浮点数被提升到power-of-two
的power-of-two
)。 在这种情况下,“1.91EB86 16 ”是“1.5700000524520874 10 ”。 乘以“2 1 ”,得到“3.140000104904175 10 ”。
请注意,这也具有保留所有精度位的有用属性,并以稳健的方式呈现它们。
至于为什么要使用hex表示的示例,您可能希望使用%a来精确表示发送到另一台计算机进行处理的浮点值。
我们目前正在使用它来对嵌入式控制器进行unit testing,方法是将模拟传感器和执行器的模拟工厂模型的数据通过UART发送到嵌入式处理器,其中嵌入式处理器执行控制处理并返回反馈(同样,浮点数表示为%a)回到工厂模型以关闭循环。