为什么跟随printf打印0x32

rea*_*ays 1 c

#include<stdio.h>
int main ()
{
printf("%#04x",50);
}
Run Code Online (Sandbox Code Playgroud)

有人向我展示了上面的代码,我无法理解它,因为我在C程序中使用过printf,但这是我第一次在生活中看到的那种用法.为什么上面的代码打印输出为

0x32
Run Code Online (Sandbox Code Playgroud)

有人可以给我一些链接或引用某些东西,以便我能更好地理解它.

Mar*_*n B 5

50十进制是32十六进制.

除此之外,文档应该告诉您需要知道的一切.


Vic*_*ian 5

printf(3)手册页:

标志字符

字符%后跟零个或多个以下标志:

# - 该值应转换为"替代形式".对于o转换,输出字符串的第一个字符为零(如果它不是零,则前缀为0).对于x和X转换,非零结果的前缀为字符串"0x"(或X转换为"0X").对于a,A,e,E,f,F,g和G转换,结果将始终包含小数点,即使其后面没有数字(通常,只有在这些转换的结果中出现小数点)数字如下).对于g和G转换,不会从结果中删除尾随零,否则它们将被删除.对于其他转换,结果是未定义的.

其他标志省略了......

因此,%#在输出格式为"0x"之前输出x.0 0用于填充(零).然后数字4表示要打印的字符总数为4.如果数字4与10交换,输出将是0x00000032- 总共10个字符.