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 是:410065408
我不知道为什么它显示垃圾值而不是 9000000000。
在具有 32 位的平台上int,100000和90000是int类型(请注意,在具有 16 位的平台上,int它们将是long类型,与我在此介绍的类似分析将适用于 32 位long。)
因此,您将两种int类型相乘。您正在int以未定义的结果溢出, 尽管 9000000000 - 410065408 是 2 32的倍数并非巧合(但不要依赖它,因为它只不过是未定义行为的一种表现)。
100000LL * 90000
Run Code Online (Sandbox Code Playgroud)
是一个修复。