首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-Woverflow cout值

-Woverflow cout值
EN

Stack Overflow用户
提问于 2017-06-24 02:37:44
回答 1查看 49关注 0票数 1

我刚开始编程,我编写了以下代码,但由于某种原因,它没有显示正确的值,尽管我几乎可以肯定,我过高了值类型。

代码语言:javascript
复制
#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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-24 21:34:46

问题是,您的正常整数中确实存在溢出。除了计算之外,您的声明是可以的。数字40、41、42、43、44和45是具有各自长度的正规整数。它们被乘以为普通整数,当数字变大时,就会发生溢出。在计算完成(溢出已经发生)之后,数字被转换为无符号的长int。

因此,也可以使用带有LLU后缀的长、无符号的数字:

代码语言:javascript
复制
a = 45LLU * 44LLU * 43LLU * 42LLU * 41LLU * 40LLU;

这将解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44732209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档