例如
printf("%x",16);
此 printf 打印 10 而不是 16 为什么它不将值作为十六进制请有人解释一下
16是一个十进制整数常量。因此常数的十六进制表示是10。如果要指定十六进制整数常量,请编写0x16u. 请注意,转换说明符x需要 type 的参数unsigned int。所以后缀u用于十六进制整数常量。
所以调用printf可以看起来像
printf( "%x\n", 0x16u );
输出将是16.
或者
printf( "%#x\n", 0x16u );
输出将是0x16.
当您将数字传递给函数时,您不会传递十进制或十六进制。从概念上讲,您传递的是一个值,一个抽象的数学数字。
该数字以某种类型表示,C 使用二进制来表示整数类型的值(以及一些二进制的有符号数的补充,通常是二进制补码)。
无论您编写printf("%x\n", 16u)或printf("%x\n", 0x10u);,编译器都会将源代码中的数字16u或转换0x10u为unsigned int以二进制表示的值。传递给 的是结果值,而printf不是十进制“16”或十六进制“10”。
(我使用16uand0x10u而不是16or0x10因为printf期望的是unsigned int,而不是int。)
该%x指令告诉printf期望一个unsigned int值并将其转换为十六进制数字。所以原来的输入形式是无关紧要的;%x表示不管原始形式如何都产生十六进制。