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

Nan*_* HE 21 c printf

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

我什么时候需要使用%a打印floatdouble输入数据?

你能告诉我一个例子吗?

unw*_*ind 38

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

作为示例,此代码:

printf("pi=%a\n", 3.14);
Run Code Online (Sandbox Code Playgroud)

打印:

pi=0x1.91eb86p+1
Run Code Online (Sandbox Code Playgroud)

在评论中链接的优秀的文章解释说,这应读"1.91EB86 16*2 1 "(即,ppower-of-two浮点数字上升到).在这种情况下,"1.91EB86 16 "是"1.5700000524520874 10 ".将其乘以"2 1 ",得到"3.140000104904175 10 ".

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

  • 您可以在此处阅读有关十六进制浮点常数的更多信息:http://www.exploringbinary.com/hexadecimal-floating-point-constants/. (7认同)

Dan*_*iel 6

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

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