C++-以一种方式执行 additon 时发生溢出,并以其他方式获得正确的输出,但为什么?

问题描述 投票:0回答:1

我正在编写一个代码,其中有一行 a、b、c、d 是整数,

int a ,b ,c ,d;
long long sum = a + b + c + d;

我收到溢出错误,但在参考答案并修改总和如下答案后,我没有遇到任何问题:

long long sum=a;
sum+=b;
sum+=c;
sum+=d;

对于这一行,我得到了正确的结果。但是为什么我无法理解其中的区别?

c++ sum overflow
1个回答
0
投票

在第一种情况下,表达式:

a + b + c + d

仅包含

int
,因此不进行任何转换,计算在
int
内完成(可能会溢出)。
结果分配给
long long
的事实并不相关,因为无论其后面的赋值如何,都会对表达式进行求值。

在第二种情况下,行如下:

sum+=b;

实际上是:

sum = sum + b;

并且

sum + b
是同时包含
int
long long
的表达式。
因此,为了评估它,
b
被转换为
long long
,并且第一种情况下的溢出不会发生。

© www.soinside.com 2019 - 2024. All rights reserved.