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