什么是C编程中的p-notation?

时间:2010-02-07 01:49:39

标签: c programming-languages variables

我现在正在学习C,并且有一个转换说明符%a,它以p符号写入数字,而不是以电子符号(指数表示法)写入内容的%e。

什么是p-notation?

5 个答案:

答案 0 :(得分:7)

使用%a获取浮点数的十六进制表示。如果您是学生学习浮点表示,或者您希望能够读取和写入没有舍入错误的精确浮点数(但不是非常易读的),这可能很有用)。

这种格式特性以及许多其他格式都是作为C99标准的一部分添加的。 Dinkumware免费在线excellent C99 library reference;它是PJ Plauger的公司,他与C89和C99标准库有很多关系。以上链接是打印功能;一般的库引用是http://www.dinkumware.com/manuals/default.aspx

答案 1 :(得分:5)

以下是c99标准的摘录,第7.19.6.1节(7),其中显示了%a或%A的详细信息(类似于上面dmckee给出的mac详细信息):

  

表示a的双参数   浮点数转换为   风格[ - ] 0xh.hhhhp±d,哪里有   是一个十六进制数字(即   如果参数是a,则非零   标准化的浮点数和   在之前没有说明   小数点字符和   它后面的十六进制数字   等于精度;如果   缺少精度,FLT_RADIX是   2的幂,那么精度是   足以准确表示   价值;如果精度是   缺少FLT_RADIX并不是一种力量   2,那么精度就足够了   区分248)类型的值   加倍,除了尾随零可能   被省略;如果精度为零   并且没有指定#flag,没有   出现小数点字符。该   字母abcdef用于a   转换和ABCDEF的字母   转换。 A转换   说明符生成一个带X和的数字   P而不是x和p。指数   始终包含至少一个数字,   并且只有更多的数字   表示小数的必要条件   指数为2.如果该值为零,   指数为零。

答案 2 :(得分:3)

从Mac OS X上的printf(3)手册页(因此BSD c标准库实现):

  

AA
      double参数被舍入并转换为十六进制nota                样式[ - ] 0xh.hhhp [+ - ] d,其中位数                在十六进制点字符等于精度之后                规格。如果缺少精度,则将其视为                足以完全代表浮点数,而不是                发生舍入。如果精度为零,则没有十六进制点                角色出现。 p是一个文字字符p', and the exponent consists of a positive or negative sign followed by a decimal number representing an exponent of 2. The A conversion uses the prefix ``0X'' (rather than ``0x''), the letters ``ABCDEF'' (rather than ``abcdef'') to represent the hex digits, and the letter P'(而不是'p')来分隔尾数和                指数。

'p'(或'P')用于将(十六进制)尾数与(十六进制)指数分开。

这些说明符在我的K& R中,并且手册页没有具体说明标准(如果有的话)指定它们。

我刚刚查看了我的Debian 5.0框(使用glibc 2.7),其中拥有它;该手册页说它与c99相关(同样,没有任何特定标准的引用)。

答案 3 :(得分:2)

没有%a格式说明符(正如我所知,当然也没有任何常见的实现)。

有一个%p格式说明符,用于打印指针地址。

Ref

更新:请参阅其他帖子。

答案 4 :(得分:2)

这可能很有用:http://www.cppreference.com/wiki/c/io/printf

具体来说,这里是你可以在printf中使用的格式说明符(没有.02之类的修饰符等):

Code    Format
%c  character
%d  signed integers
%i  signed integers
%I64d   long long (8B integer), MS-specific
%I64u   unsigned long long (8B integer), MS-specific
%e  scientific notation, with a lowercase “e”
%E  scientific notation, with a uppercase “E”
%f  floating point
%g  use %e or %f, whichever is shorter
%G  use %E or %f, whichever is shorter
%o  octal
%s  a string of characters
%u  unsigned integer
%x  unsigned hexadecimal, with lowercase letters
%X  unsigned hexadecimal, with uppercase letters
%p  a pointer
%n  the argument shall be a pointer to an integer into which is placed the number of characters written so far