long long int 不支持较大数的乘法

1 c++

我正在尝试执行一个简单的长乘法,但没有显示正确的输出。这是示例代码

'''
#include<iostream>
using namespace std;
int main ()
{
    long long int c=100000*90000;
    cout<<c;
    return 0;
}
'''
Run Code Online (Sandbox Code Playgroud)

变量 c 的 cout 是:41006540​​8

我不知道为什么它显示垃圾值而不是 9000000000。

Bat*_*eba 5

在具有 32 位的平台上int10000090000int类型(请注意,在具有 16 位的平台上,int它们将是long类型,与我在此介绍的类似分析将适用于 32 位long。)

因此,您将两种int类型相乘。您正在int以未定义的结果溢出, 尽管 9000000000 - 41006540​​8 是 2 32的倍数并非巧合(但不要依赖它,因为它只不过是未定义行为的一种表现)。

100000LL * 90000
Run Code Online (Sandbox Code Playgroud)

是一个修复。