如何解决当我要使用 printf 打印十六进制值时,它为什么将输入作为十进制值?
例如
printf("%x",16);
这个 printf 打印 10 而不是 16 为什么它不把值作为十六进制请有人解释一下
解决方法
16
是十进制整数常量。因此,常量的十六进制表示为 10
。如果你想指定一个十六进制整数常量,那么写 0x16u
。请注意,转换说明符 x
需要类型为 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
和 0x10u
而不是 16
或 0x10
因为 printf
需要 unsigned int
,而不是 {{1} }.)
int
指令告诉 %x
期待一个 printf
值并将其转换为十六进制数字。所以原来的输入形式是无关紧要的; unsigned int
表示无论原始形式如何都生成十六进制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。