我现在正在学习C,并且有一个转换说明符%a,它以p符号写入数字,而不是以电子符号(指数表示法)写入内容的%e。
什么是p-notation?
答案 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)
答案 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