我正在编写一个代码,其中有一行 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;
对于这一行,我得到了正确的结果。但是为什么我无法理解其中的区别?
在第一种情况下,表达式:
a + b + c + d
仅包含
int
,因此不进行任何转换,计算在 int
内完成(可能会溢出)。long long
的事实并不相关,因为无论其后面的赋值如何,都会对表达式进行求值。
在第二种情况下,行如下:
sum+=b;
实际上是:
sum = sum + b;
并且
sum + b
是同时包含 int
和 long long
的表达式。b
被转换为long long
,并且第一种情况下的溢出不会发生。