C 我试图用long int类型存储值,但返回错误
我试图在long int数据类型中存储“100000000000000000”(19个零)C 我试图用long int类型存储值,但返回错误,c,C,我试图在long int数据类型中存储“100000000000000000”(19个零) #if __WORDSIZE == 64 typedef long long int intmaximum_t; #else __extension__ typedef unsigned long int intmaximum_t; #endif const intmaxim
#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位
长整型的最大可能值是9223372036854775807
。你的数字比那还大。(请注意,这个数字减去你得到的数字是你实际想要的数字的一个-这不是巧合,而是2的补码运算的一个属性)
它适合于无符号long long int
类型,但如果需要无符号
类型,则需要使用大数字库作为数字,或者int128_t
如果编译器支持它。值100000000000000000太大,无法用于有符号64位整数,但可以用于无符号64位整数。因此,当您尝试分配值时,它会以实现定义的方式进行转换(通常是直接分配二进制表示法),并以负数打印,因为您很可能使用%d
或%ld
作为格式说明符
unsigned long long x = 10000000000000000000;
printf("x=%llun", x);
您需要将变量声明为unsigned long long
,并使用%llu
格式说明符打印它
unsigned long long x = 10000000000000000000;
printf("x=%llun", x);
此代码未生成任何输出,请提供一个。请选择一种语言。C和C++是不同的语言,输出依赖于适当的格式说明符。您根本不显示对printf
的任何函数调用。请尝试unsigned long long
而不是unsigned long int
尝试unsigned long long
。2^63=9.22*10^18。那你为什么期待一个可预测的结果呢?我更希望编译器警告你这个数字不合适。阅读编译器警告,进行计算。您不也需要将文本指定为无符号(最好是长-长)吗<代码>100000000000000000ull
。我不认为整数提升会使有符号数变成无符号数,而且由于没有足够大的有符号类型来保存该值,因此您必须自己执行该操作。@Christiangibons常量根据其值和表示形式隐式指定一个类型。在这种情况下,常量隐式为无符号long
。不需要后缀。嗯,这似乎在我的测试中得到了验证(尽管它确实用-Wall-Wextra-pedantic
给出了编译器警告)。我确信大约一年前我遇到了一个问题,因为无法以其他方式表示值,我不得不将整数文本强制为ULL
。我得看看能不能找到促使这种需要的确切用法。