C++ INT_MAX的比较

C++ INT_MAX的比较,c++,C++,我试着比较两个INT_MAX,然后把这个结果和一个整数比较,我得到了一个奇怪的结果。你能解释一下为什么会发生这种情况吗 #include <iostream> #include <climits> #include <bits/stdc++.h> using namespace std; int main() { // your code goes here int a = 2; int option1 = min(INT_MAX,

我试着比较两个INT_MAX,然后把这个结果和一个整数比较,我得到了一个奇怪的结果。你能解释一下为什么会发生这种情况吗

#include <iostream>
#include <climits>
#include <bits/stdc++.h>
using namespace std;
  int main() {
    // your code goes here
    int a = 2;
    int option1 = min(INT_MAX, 1+INT_MAX);
    cout << "Result 1 " << option1 << endl;
    cout << "Result 2" << min(option1, 1+a);
    return 0;
}
根据我的说法,结果2应该是3,但它给出了其他一些东西。我不明白这种不同输出背后的原因。

这溢出了

int option1 = min(INT_MAX, 1+INT_MAX);
INT\u MAX
(或更好的:
std::numeric\u limits::MAX()
)的目的是作为最大
INT
值的常量,该值可以用
INT
在系统上的字节数表示。如果向其添加
1
,则这是有符号整数溢出


有符号整数溢出会导致未定义的行为。你不能对程序的输出进行真正的推理,因为任何事情都可能发生。请注意,正如@Thomas和@Maximum_prime_在注释中指出的,无符号整数溢出不是UB,而是环绕的。

INT_MAX是在(有符号)INT中可以存储的最大正值,当您将1添加到其中时。不过,这并不奇怪,因为(unsigned int)0x7FFFFFFF+1==0x8000000,这是2的补码中的值-2147483648。现在,您将一个大负数与3进行比较,得到预期的大负值。

当您将1添加到可能的最大值时,您期望得到什么?@maxist_prime_is_463035818 Username checkout:)为什么您期望
min(-2147483648,3)是3?我听到一些谣言说它不会是即将到来的C++版本的UB。无论如何,它应该是“有符号整数overfow is UB”,因为unsigend是fineedpandry:只有有符号整数溢出(如这里所示)才会导致UB。无符号整数溢出是定义良好的。@Thomas是的,这可能应该提到。谢谢
int option1 = min(INT_MAX, 1+INT_MAX);