gpt4 book ai didi

c++ - VS13 C++ 意外整数溢出

转载 作者:行者123 更新时间:2023-11-28 00:10:24 28 4
gpt4 key购买 nike

在 VS13 中考虑这段 C++ 代码:

long long Number;
Number = 10000000000*900;
Number = 10000000*214;
Number = 10000000*215;
Number = (long long) 10000000*215;

当您编译它时,第 4 行会收到 warning C4307: '*' : integral constant overflow。当您运行代码时,实际上会出现积分溢出。其他线路没问题。我是不是忽略了什么?

最佳答案

10000000 常量(文字)在默认情况下被视为 int 常量,因为它适合 int 类型:

The type of the integer literal is the first type in which the value can fit, from the list of types which depends on which numeric base and which integer-suffix was used

( http://en.cppreference.com/w/cpp/language/integer_literal )

因此乘法是在 int 类型中完成的(没有整数提升发生)。你可以考虑这条线

Number =     10000000*215;

好像是

const int tmp1 = 10000000;
const int tmp2 = 215;
Number = tmp1*tmp2;

显然这会产生溢出,同样第三行和最后一行不会产生溢出。对于第二行,编译器理解 10000000000 既不适合 int 也不适合 long,因此使用 long long 为之。

您可以使用 ll 后缀强制常量为 long long:

Number =     10000000ll*215;

关于c++ - VS13 C++ 意外整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33474066/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com