我正在尝试在C中打印十六进制数字作为小数。
int main()
{
unsigned long hex = 0xb5389e0c721a;
printf("hex in dec: %lu", hex);
getch();
return 0;
}
从此,我的输出是2651615770.但是,当我使用在线十六进制转换器和Windows计算器时,假定的输出应该是199254774411802.我做错了什么?
答案 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;
}