【问题标题】:When I going to print a hexadecimal value using printf it takes the input as decimal value why? [closed]当我要使用 printf 打印十六进制值时,它会将输入作为十进制值,为什么? [关闭]
【发布时间】:2021-07-28 00:59:33
【问题描述】:

例如

printf("%x",16);

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

【问题讨论】:

  • 十进制的 16 是十六进制的 10。

标签: c hex printf conversion-specifier


【解决方案1】:

16 是一个十进制整数常量。因此常数的十六进制表示是10。如果你想指定一个十六进制整数常量,那么写0x16u。请注意,转换说明符x 需要unsigned int 类型的参数。所以后缀u用在十六进制整数常量中。

所以printf 的调用看起来像

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

输出将是16

或者

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

输出将是0x16

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多