C++中两个整数的乘法

ess*_*ssa 16 c++ int range long-integer

我有一个非常基本的问题,但我不确定我是否理解这个概念.假设我们有:

int a = 1000000;
int b = 1000000;
long long c = a * b;
Run Code Online (Sandbox Code Playgroud)

当我运行此,c显示负值,所以我改变也ablong long,然后一切都很好.那么,为什么我必须改变ab,当其值在范围int和他们的产品被分配到c(这是long long)?

我正在使用C/C++

Yve*_*ust 20

ints的不晋升为long long乘法之前,他们仍然intS和产品为好.然后产品被投入long long,但为时已晚,溢出已经发生.

有一个ab long long应该工作,另一个将被提升.