C++ 中的“Int”乘法与“long long”结果

roa*_*ang 9 c++ integer-overflow multiplication long-long

我试图找到 a 的平方int。我的代码如下所示:

long long sqr=0;
int num=77778;
sqr= num*num;
Run Code Online (Sandbox Code Playgroud)

结果应该是6049417284 但是当我检查输出时它显示1754449988。我在做什么错误? long long应该能够存储结果,但为什么我得到不同的值?

Ily*_*lya 11

在这种情况下,中间结果类型与第一个参数类型相同。所以这段代码放入了错误的值sqr(因为这里有整数溢出)。尝试这个:

long long num = 77778;
long long sqr = num * num;
Run Code Online (Sandbox Code Playgroud)

另一种铸造方式:

int num = 77778;
long long sqr = (long long) num * num;
Run Code Online (Sandbox Code Playgroud)

为了更好地理解它,你可以检查这些行:

int ia = 1, ib = 2;
double da = 1.0, db = 2.0;
double ic = ia / ib; // c == 0.0, because intermediate result of division is 0
double dc = da / db; // c == 0.5, expected result
Run Code Online (Sandbox Code Playgroud)

  • @rowang存储之前的中间结果与参数类型相同。 (2认同)

小智 7

如果将两个整数值相乘,结果将是一个整数值。那么,给long long赋值整数值就没有意义了。

因此,为了获得所需的结果,num 也应该很长。