我试图以long long int类型存储值,但给出错误的回报

时间:2019-05-09 12:49:07

标签: c

我试图在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位计算机。如何存储该值?

2 个答案:

答案 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);