C++ c++;在添加两个绝对(正)值时获取负值

C++ c++;在添加两个绝对(正)值时获取负值,c++,int,cmath,C++,Int,Cmath,我遇到了一个奇怪的问题。当两个绝对(正)值相加时,我得到一个负值。我正试图通过codingame(链接:)解决此练习 我尝试过调试,得到了以下结果: X[i]: 19715507 X[j]: 938059973 // This one is good temp: 918344466 Y[i]: 470868309 Y[j]: -816049599 //Something is wrong here temp: -2089704922 这段代码可能不是一个很好的解决方案,我需要对

我遇到了一个奇怪的问题。当两个绝对(正)值相加时,我得到一个负值。我正试图通过codingame(链接:)解决此练习

我尝试过调试,得到了以下结果:

X[i]: 19715507  X[j]: 938059973   // This one is good
temp: 918344466   

Y[i]: 470868309  Y[j]: -816049599 //Something is wrong here
temp: -2089704922
这段代码可能不是一个很好的解决方案,我需要对其进行改进,但我仍然无法理解为什么该值为负值

请帮忙

多谢各位

代码:


int
的最大值为2147483647(假设
int
具有32位宽度,则该值为2^31-1)。你可以跟我核对一下

std::numeric_limits<int>::max();
std::numeric_limits::max();

您可能希望在此处使用此值
min
。也可以使用
long-long
作为计算的类型。

在普通PC上,
int
类型是有符号的32位类型,这意味着它可以有大约从负20亿到正20亿的值
99999999999999999999
不在该范围内。您认为
99999999999999
可以存储在
int
中而不会溢出吗?您可能需要
long-long-int
,或者
long-int
。(但它们的大小可能与
int
)相同。请检查
std::numeric\u limits::max()
的值,并将其与预期的结果进行比较。此外,溢出有符号整数类型会导致未定义的行为。最有可能发生的情况是它变成负数,因为这是(表示负数的最常见方式)的工作原理。
long long int
可以与
int
相同,如果CPU不支持较大的整数。不要求它必须更大,只要求它至少同样大。int的最大值也可以是2147483647-5,
std::numeric\u limits::max()
可能会返回不同的值谢谢,成功了!:)@user463035818:是的,概率为10^-128。@Yvesdao为什么在所有情况下都要冒10^-128 UB的风险,而你却可以将其设为0。@user463035818:因为base-3计算机,例如Setun。这些机器的C++端口是不可能的。
 8
-28189131 593661218
102460950 1038903636
938059973 -816049599
-334087877 -290840615
842560881 -116496866
-416604701 690825290
19715507 470868309
846505116 -694479954
std::numeric_limits<int>::max();