我试图在long long int数据类型中存储“ 10000000000000000000”(19个零)。
#if __WORDSIZE == 64
typedef long long int intmaximum_t;
#else
__extension__
typedef unsigned long int intmaximum_t;
#endif
const intmaximum_t = 10000000000000000000;
但是它给出的输出为“ -8446744073709551616”(负)。
我有使用ubuntu OS的64位计算机。如何存储该值?
答案 0 :(得分:4)
64位long long int
的最大可能值为9,223,372,036,854,775,807
。你的人数比那大。 (请注意,此数字减去获得的数字将减去您实际想要的数字-这不是巧合,而是2的补数算法的性质。)
它可以放在unsigned long long int
中,但是如果您需要unsigned
类型,则需要使用大量数字作为数字,如果编译器支持,则使用int128_t
答案 1 :(得分:2)
值10000000000000000000太大,无法容纳带符号的64位整数,但将适合无符号的64位整数。因此,当您尝试分配值时,它会以实现定义的方式进行转换(通常是直接分配二进制表示形式),并且会打印为负数,因为您最有可能使用%d
或%ld
作为您的格式说明符。
您需要将变量声明为unsigned long long
,并使用%llu
格式说明符进行打印。
unsigned long long x = 10000000000000000000;
printf("x=%llun", x);