【问题标题】:Hexadecimal representation十六进制表示
【发布时间】:2016-02-06 14:30:46
【问题描述】:

我想将十六进制 int 值打印为 %d。

当值写成十六进制时,这不是问题:

#include <stdio.h>

    int main(void) {
        int x=0x18;
        int y=0xAB;
        printf("%d %d", x, y );

        return 0;
    }

但是...当这是 dec 值时如何打印?

我想要这样的东西:

  1. 十进制值:

x = 551 更改为十六进制 x = 227 并打印为 %d ?

在这个练习中,我必须将十六进制整数打印为 %d。

希望我写得干净。 :)

问候,

【问题讨论】:

  • xy 不是“十六进制整数”。它们只是整数。
  • 阅读 printf 的手册页
  • 您是在尝试将 convert 转换为十六进制表示,然后打印结果字符串,还是在询问使用什么格式说明符来打印十六进制的 int?如果是前者——实现一个基本转换算法。如果是后者——阅读手册(或在 Google 上花 30 秒)。在任何一种情况下 --- 我不知道“使用 %d 打印”是什么意思,因为该说明符以十进制而不是十六进制打印。如果您构造十六进制字符串,则需要%s 将其显示为字符串。

标签: c hex


【解决方案1】:

如果你这样做:

int x = 898;
x = 0x382;
printf(" x = %d", x);

输出将是:

 x = 898

在您的代码中,8980x382 是表示同一数字的两种不同方式。它们的存储方式完全相同。

printf 所做的是获取该数字的内部表示,如果您使用 %d,则以十进制格式打印,如果您使用 %x,则以十六进制格式打印。你如何完成任务并不重要。

另一种看待它的方式——这段代码:

int x = 898;
int y = 0x382;
if (x == y) {
    printf("x and y are equal\n");
} else {
    printf("x and y are not equal\n");
}

输出:

x and y are equal

【讨论】:

    【解决方案2】:

    奇数请求:打印十进制值,使用"%x"

    void dec_print_with_x(unsigned x) {
      if (x >= 10) dec_print_with_x(x/10);
      printf("%x", x%10);
    }
    
    int main ( void )
    {
      dec_print_with_x(0x227);
      return 0;
    }
    

    输出:

    551
    

    需要明确的是,变量xint x = 0x227;int x = 551; 既不是十进制、十六进制也不是二进制。它有一个以某种方式编码并存储在某处的整数 - 很可能是 2's complement 中的固定宽度位模式。

    0x180xAB 0x227文本,它是源代码的一部分,"551" 是输出的一部分。这些字符序列表示十六进制或十进制表示的值。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2014-10-12
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2011-12-06
      • 2011-04-18
      相关资源
      最近更新 更多