C++ C++;:整型常量对于其类型太大
我需要花一年的时间来锻炼。编译器不断抛出此错误: bruteforceJS12.cpp:8:28:警告:整型常量对于其类型而言太大[默认情况下已启用] 我的代码是:C++ C++;:整型常量对于其类型太大,c++,gcc,C++,Gcc,我需要花一年的时间来锻炼。编译器不断抛出此错误: bruteforceJS12.cpp:8:28:警告:整型常量对于其类型而言太大[默认情况下已启用] 我的代码是: #include <iostream> using namespace std; int main(){ unsigned long long year(0); unsigned long long result(318338237039211050000); unsigned long l
#include <iostream>
using namespace std;
int main(){
unsigned long long year(0);
unsigned long long result(318338237039211050000);
unsigned long long pass(1337);
while (pass != result)
{
for (unsigned long long i = 1; i<= year; i++)
{
pass += year * i * year;
}
cout << "pass not cracked with year = " << year << endl;
++year;
}
cout << "pass cracked with year = " << year << endl;
}
一种快速计算系统上数值限制的方法是使用。运行以下代码时系统上的输出:
#include <iostream>
#include <limits>
int main()
{
std::cout << "ull\t"
<< std::numeric_limits<unsigned long long>::lowest() << '\t'
<< std::numeric_limits<unsigned long long>::max() << std::endl ;
}
我们可以看到最大值肯定小于您的文字值:
18446744073709551615
318338237039211050000
因此,整数文字对于无符号long-long类型来说太大。一种快速计算系统数字限制的方法是使用。运行以下代码时系统上的输出:
#include <iostream>
#include <limits>
int main()
{
std::cout << "ull\t"
<< std::numeric_limits<unsigned long long>::lowest() << '\t'
<< std::numeric_limits<unsigned long long>::max() << std::endl ;
}
我们可以看到最大值肯定小于您的文字值:
18446744073709551615
318338237039211050000
因此,整数文本对于无符号长类型来说太大。您的问题只是
31833823039211050000ull
超出范围
假设为64位类型,64位值适用于log10(264-1)十进制数字(即所有19位值和一些较低的20位值),318382370392111050000ull
有21位。264-1(18446744073709551615ull
)是最大值
值318338233703921050000至少需要log10(318338233703921050000)/log10(2)位。这是69位。您的问题只是
318338239211050000ull
超出范围
假设为64位类型,64位值适用于log10(264-1)十进制数字(即所有19位值和一些较低的20位值),318382370392111050000ull
有21位。264-1(18446744073709551615ull
)是最大值
值318338233703921050000至少需要log10(318338233703921050000)/log10(2)位。这是69位。您应该使用ASCII表示法。它是否会失败,结果是
无符号long-long-result=318338239211050000ull代码>?这可能只是因为它不喜欢那个初始化方法吗?`警告:整型常量对于它的类型来说太大了'。。。它不能存储在无符号长变量中。就这些。使用std::numeric\u limits::max()
查看您的问题所在。3183382382039211050000明显大于18446744073709551615。int128\u t
应该足够大,如果您可以访问该类型。您应该使用ASCII表示法。它是否会因无符号长结果=318338239211050000ull而失败代码>?这可能只是因为它不喜欢那个初始化方法吗?`警告:整型常量对于它的类型来说太大了'。。。它不能存储在无符号长变量中。就这些。使用std::numeric\u limits::max()
查看您的问题所在。3183382382039211050000明显大于18446744073709551615。int128\u t
应该足够大,如果您可以访问该类型。非常感谢。我将用python实现相同的代码,而不是试图找到支持此操作的库。谢谢。我将用python实现相同的代码,而不是试图找到支持此操作的库;编译器给它一个将保存该值的类型。@petebecker所有整数文本都默认为int,因此您需要使用suffix@texasbruce:那是不正确的。无固定小数整数文本的类型是可以表示其值的int
、long int
、long long int
中的第一个。(在标准的早期版本中,这个列表不同)参见C++标准中的2.2.2[Lex.IcI]部分。@ KeththppsPs:我们生活和学习。因为它与答案无关,所以我删除了关于后缀的注释。我发誓我已经有编译器报告错误超过了int的大小。也许在C90而不是C++,当然在C++ 98之前——我已经做了这么长时间了。使用后缀现在是我的一个习惯,可能不是一个坏习惯。文字值的默认类型可能与分配给它的类型不匹配,因此,对于严格的类型一致性,它可能仍然是“良好做法”,而不是一项要求。@Clifford:C90规则是,不固定的十进制文字的类型为int
,long int
,或unsigned long int
。在C++98中,它是int
或long int
。标准前编译器可能需要int
;编译器给它一个将保存该值的类型。@petebecker所有整数文本都默认为int,因此您需要使用suffix@texasbruce:那是不正确的。无固定小数整数文本的类型是可以表示其值的int
、long int
、long long int
中的第一个。(在标准的早期版本中,这个列表不同)参见C++标准中的2.2.2[Lex.IcI]部分。@ KeththppsPs:我们生活和学习。因为它与答案无关,所以我删除了关于后缀的注释。我发誓我已经有编译器报告错误超过了int的大小。也许在C90而不是C++,当然在C++ 98之前——我已经做了这么长时间了。使用后缀现在是我的一个习惯,可能不是一个坏习惯。文字值的默认类型可能与分配给它的类型不匹配,因此,对于严格的类型一致性,它可能仍然是“良好做法”,而不是一项要求。@Clifford:C90规则是,不固定的十进制文字的类型为int
,long int
,或unsigned long int
。在C++98中,它是int
或long int
。标准前编译器可能需要int
。