C++ long int不支持较大数字的乘法

C++ long int不支持较大数字的乘法,c++,C++,我试图执行一个简单的长乘法,但它没有显示正确的输出。 下面是示例代码 ''' #include<iostream> using namespace std; int main () { long long int c=100000*90000; cout<<c; return 0; } ''' 变量c的cout为:410065408 我不知道为什么它显示的是垃圾值而不是900000000。在具有32位int的平台上,100000和90000是in

我试图执行一个简单的长乘法,但它没有显示正确的输出。 下面是示例代码

'''
#include<iostream>
using namespace std;
int main ()
{
    long long int c=100000*90000;
    cout<<c;
    return 0;
}
'''
变量c的cout为:410065408


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

在具有32位int的平台上,100000和90000是int类型注意,在具有16位int的平台上,它们将是长类型,我在这里介绍的类似分析将应用于32位长

因此,将两个int类型相乘。虽然900000000-410065408是232的倍数并不是巧合,但是不要依赖于它,因为它只不过是未定义行为的一种表现

100000LL * 90000

是一个修复。

在32位int的平台上,100000和90000是int类型注意,在16位int的平台上,它们将是长类型,我在这里介绍的类似分析将应用于32位长

因此,将两个int类型相乘。虽然900000000-410065408是232的倍数并不是巧合,但是不要依赖于它,因为它只不过是未定义行为的一种表现

100000LL * 90000
是一个补丁。

100000的类型在您的系统上可能是1 int。90000的类型在您的系统上可能是int。将两个int对象相乘。int保证表示32'767以内的数字。在现代x86系统上,它最多可以代表2'147'483'647。这些最大值小于9'000'000'000。因此,程序的行为是未定义的

使用这个溢出的int初始化long-long与结果无关。必须对长对象执行乘法,才能获得至少64位的乘法

1假设这些数字在您的系统(即现代x86系统)上可以表示为int。在某些系统上可能很长。

100000的类型在您的系统上可能是1 int。90000的类型在您的系统上可能是int。将两个int对象相乘。int保证表示32'767以内的数字。在现代x86系统上,它最多可以代表2'147'483'647。这些最大值小于9'000'000'000。因此,程序的行为是未定义的

使用这个溢出的int初始化long-long与结果无关。必须对长对象执行乘法,才能获得至少64位的乘法


1假设这些数字在您的系统(即现代x86系统)上可以表示为int。在某些系统上可能很长。

此代码将两个整数相乘,得到一个整数,然后将其转换为长longI.e。我不认为您尝试了10000LL*90000LL或类似的方法?启用警告以捕获此信息。现代编译器甚至可以在没有警告的情况下运行。此代码将两个整数相乘,得到一个整数,然后将其转换为长longI.e。我不认为您尝试了10000LL*90000LL或类似的方法?启用警告以捕获此信息。“现代编译器甚至会没有警告。”弗兰·Cou.OISANDIUX:我仍然保持我的猜想,即在我编写时运行C和C++程序的大多数系统都有16位int类型。@弗兰Cou-OISANDIUX:我仍然保持我的猜想,即在我写这篇文章的时候,运行C和C++程序的大多数系统。一个16位整数类型。基本上我已经生成了可以长到100000的随机数来填充数组并计算最大对积。基本上我已经生成了可以长到100000的随机数来填充数组并计算最大对积。