c++ - -Woverflow catn cout值

标签 c++ overflow

我刚开始编程并编写了以下代码,但出于某种原因,它没有显示正确的值,尽管我几乎可以肯定我对值类型的杀伤力太大了​​。

#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:1569475904

Process 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/

相关文章:

html - IE6 + IE7 CSS 溢出问题 : hidden; - position: relative; combo

javascript - 将文本保留在 div : Both newline, 空白和长单词内

css - 带有 overflow hidden 的内联 div

c++ - ACE 在 MAC OS X 10.9(及更高版本)中的链接器中失败

c++ - 在 C++ 中,如何从文件中读取矩形的 x、y 坐标?

c++ - cin.clear() 如何清除输入缓冲区?

css - 滚动浏览 Chrome 中的隐藏内容

c++ - 如何知道是否有任何可供安装的 Windows 操作系统更新?

c++ - 抛出和共享对象的可见性

html - 使用下拉菜单从水平导航中删除滚动条