我刚开始编程,我编写了以下代码,但由于某种原因,它没有显示正确的值,尽管我几乎可以肯定,我过高了值类型。
#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 模具wahrscheinlichkeit : 1:1569475904进程完成,退出代码0
而这个警告是:
Warnung: Ausdruck -Woverflow中的Ganzzahlüberlauf A= 45*44*43*42*41*40;
它意味着表达式中的整数溢出(或类似的内容)。
当我使用普通计算器时,我得到了这个5864443200。
我正在使用C++14。
发布于 2017-06-24 21:34:46
问题是,您的正常整数中确实存在溢出。除了计算之外,您的声明是可以的。数字40、41、42、43、44和45是具有各自长度的正规整数。它们被乘以为普通整数,当数字变大时,就会发生溢出。在计算完成(溢出已经发生)之后,数字被转换为无符号的长int。
因此,也可以使用带有LLU后缀的长、无符号的数字:
a = 45LLU * 44LLU * 43LLU * 42LLU * 41LLU * 40LLU;这将解决你的问题。
https://stackoverflow.com/questions/44732209
复制相似问题