例如
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”。
(我使用16u
and0x10u
而不是16
or0x10
因为printf
期望的是unsigned int
,而不是int
。)
该%x
指令告诉printf
期望一个unsigned int
值并将其转换为十六进制数字。所以原来的输入形式是无关紧要的;%x
表示不管原始形式如何都产生十六进制。