在C中打印十进制数字作为十进制

时间:2014-07-26 13:37:37

标签: c hex printf decimal

我正在尝试在C中打印十六进制数字作为小数。

int main()
{
    unsigned long hex = 0xb5389e0c721a;
    printf("hex in dec: %lu", hex);
    getch();
    return 0;
}

从此,我的输出是2651615770.但是,当我使用在线十六进制转换器和Windows计算器时,假定的输出应该是199254774411802.我做错了什么?

3 个答案:

答案 0 :(得分:2)

我认为你的2651615770输出是由于溢出造成的。这是因为32位unsigned long hex无法容纳这么大的数字(0xb5389e0c721a),因此它需要更大的数据类型。

尝试以下更改 -

int main()
{
    unsigned long long hex = 0xb5389e0c721a; // declare hex as unsigned long long
    printf("hex in dec: %llu", hex);
    getch();
    return 0;
}

答案 1 :(得分:1)

  

我做错了什么?

您正在使用unsigned long类型,该类型仅保证为32位宽,并且可能无法包含值0xb5389e0c721a。请改用unsigned long long,保证至少为64位宽,然后使用%llu进行打印。

对于给定的编译平台,unsigned long可以包含的最大值是固定的。它位于系统标头ULONG_MAX的宏limits.h中。您还可以为编译器打印其值,而不必将limits.h包含在语句printf("%lu", (unsigned long)-1);中。

答案 2 :(得分:0)

0xb5389e0c721a超出了unsigned long的限制。使用' unsigned long long'改为输入,并使用格式字符串"%llx"打印该值:

#include <stdio.h>

int main()
   {
   unsigned long long hex = 0xb5389e0c721a;

   printf("hex in dec: %llx\n", hex);
   return 0;
   }