-2

例如

printf("%x",16);

此 printf 打印 10 而不是 16 为什么它不将值作为十六进制请有人解释一下

4

2 回答 2

3

16是一个十进制整数常量。因此常数的十六进制表示是10。如果要指定十六进制整数常量,请编写0x16u. 请注意,转换说明符x需要 type 的参数unsigned int。所以后缀u用于十六进制整数常量。

所以调用printf可以看起来像

printf( "%x\n", 0x16u );

输出将是16.

或者

printf( "%#x\n", 0x16u );

输出将是0x16.

于 2021-05-05T17:09:59.087 回答
0

当您将数字传递给函数时,您不会传递十进制或十六进制。从概念上讲,您传递的是一个值,一个抽象的数学数字。

该数字以某种类型表示,C 使用二进制来表示整数类型的值(以及一些二进制的有符号数的补充,通常是二进制补码)。

无论您编写printf("%x\n", 16u)printf("%x\n", 0x10u);,编译器都会将源代码中的数字16u或转换0x10uunsigned int以二进制表示的值。传递给 的是结果值,而printf不是十进制“16”或十六进制“10”。

(我使用16uand0x10u而不是16or0x10因为printf期望的是unsigned int,而不是int。)

%x指令告诉printf期望一个unsigned int值并将其转换为十六进制数字。所以原来的输入形式是无关紧要的;%x表示不管原始形式如何都产生十六进制。

于 2021-05-05T17:23:18.643 回答