我正在尝试用c打印十六进制十进制数。
int main()
{
unsigned long hex = 0xb5389e0c721a;
printf("hex in dec: %lu", hex);
getch();
return 0;
}
由此,我的输出是2651615770。然而,当我使用在线十六进制到dec转换器和Windows计算器时,假定的输出应该是199254774411802。我做错了什么?
我认为你的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;
}
我做错了什么?
您正在使用unsigned long
类型,它只能保证32位宽,并且可能无法包含值0xb5389e0c721a
。使用unsigned long long
代替,它保证至少是64位宽,并使用%llu
打印。
对于给定的编译平台,unsigned long
可以包含的最大值是固定的。它在系统头文件limits.h
的宏ULONG_MAX
中。您还可以为编译器打印它的值,而不必在语句printf("%lu", (unsigned long)-1);
中包含limits.h
。
0xb5389e0c721a
已超过unsigned long
的上限。使用'unsigned long long'类型,并使用"%llx"
格式字符串打印值:
#include <stdio.h>
int main()
{
unsigned long long hex = 0xb5389e0c721a;
printf("hex in dec: %llxn", hex);
return 0;
}