我正在尝试将10000000000000000000
(1019)存储在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
。
我有一台运行Ubuntu的64位机器。如何存储此值?
2条答案
按热度按时间nwwlzxa71#
64位
long long int
的最大可能值是9,223,372,036,854,775,807
。你的数字比那大。(注意,这个数减去你得到的数是你实际想要的数的一个-这不是巧合,而是2的补码算术的一个属性)。它适合
unsigned long long int
,但是如果你需要一个unsigned
类型,你需要为你的数字使用一个大的数字库,或者如果你的编译器支持的话,使用int128_t
。wnrlj8wa2#
值100000000000000000太大,不适合有符号的64位整数,但适合无符号的64位整数。因此,当你试图赋值时,它会以实现定义的方式进行转换(通常是直接赋值二进制表示),并且它会打印为负数,因为你很可能使用
%d
或%ld
作为格式说明符。您需要将变量声明为
unsigned long long
,并使用%llu
说明符打印它。