微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我要使用 printf 打印十六进制值时,它为什么将输入作为十进制值?

如何解决当我要使用 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);,编译器都会将源代码中的数字 16u0x10u 转换为 unsigned int 值,表示为二进制。传递给 printf 的是结果值,而不是十进制“16”或十六进制“10”。

(我使用 16u0x10u 而不是 160x10 因为 printf 需要 unsigned int,而不是 {{1} }.)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。