C++中的整数溢出

integer overflow in c++

你能解释一下为什么我在第一个代码中出现整数溢出但在第二个代码中没有吗?

#include<bits/stdc++.h>
using namespace std;
#define ch "\n"
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long int g = (1000000 * 2) * 1000000;
    // long long int k = f * 1000000;
    cout << g % 10000003;
    return 0;
}

'''

#include<bits/stdc++.h>
using namespace std;
#define ch "\n"
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    long long int f = 1000000 * 2;
    long long int k = f * 1000000;
    cout << k % 10000003;
    return 0;
}

第二个代码给出正确的输出,而第一个代码显示错误。错误如下所示。

 warning: integer overflow in expression of type 'int' results in '-1454759936' [-Woverflow]
    8 |  long long int g = (1000000 * 2) * 1000000;
      |                    ~~~~~~~~~~~~~~^~~~~~~~~
[Finished in 0.8s]

(1000000 * 2) * 1000000 中的所有文字都是 int 类型,编译器警告您这会溢出您平台上的 int

将此表达式的结果分配给其他类型并不重要。

一种解决方案是使用 (2ll * 1000000) * 1000000,它会强制对其他项进行隐式转换。