我刚开始编程并编写了以下代码,但出于某种原因,它没有显示正确的值,尽管我几乎可以肯定我对值类型的杀伤力太大了。
#include <limits>
#include <iostream>
int main() {
unsigned long long int imin = std::numeric_limits<unsigned long long int>::min(); // minimum value
unsigned long long int imax = std::numeric_limits<unsigned long long int>::max(); // maximum value
std::cout << imin << " " << imax << std::endl;
unsigned long long int a;
a = 45*44*43*42*41*40;
std::cout << "die wahrscheinlichkeit ist: 1:" << a << std::endl;
return 0;
}
当我编译它时,我得到这个:
0 18446744073709551615
die wahrscheinlichkeit ist: 1:1569475904Process finished with exit code 0
和这个警告:
Warnung: Ganzzahlüberlauf in Ausdruck [-Woverflow]
a = 45*44*43*42*41*40;
翻译过来,意思是整数在表达式中溢出(或类似的东西)。
当我使用普通计算器时,我得到这个 5864443200。
我正在使用 C++14。
最佳答案
问题确实是您的普通 int 数字有溢出。你的声明很好,除了在计算中。数字 40、41、42、43、44 和 45 是具有各自长度的正常整数。它们像普通整数一样相乘,当数字变大时就会发生溢出。计算完成后(溢出已经发生),数字被转换为 unsigned long long int。
因此,使数字也成为带有 LLU 后缀的 long long unsigned 类型:
a = 45LLU * 44LLU * 43LLU * 42LLU * 41LLU * 40LLU;
这将解决您的问题。
关于c++ - -Woverflow catn cout值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44732209/