当我在c中添加时,为什么带正值的int变为负数?

-4 c

我在c中写了代码:

#include <stdlib.h>
#include <stdio.h>

int main()
{

    int num= 2147483646;
    printf("%d,%d" , num+1, num+2);

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

而输出是 -2147483647,-2147483648

当我向变量num添加2时,为什么数字变为负数?

Bat*_*eba 5

你确定输出不是2147483647, -2147483648吗?我从来没有遇到过2147483646有效的平台int2147483647不是(尽管理论上可行).

溢出int类型的行为在C中是未定义的.

这里似乎发生的是INT_MIN一旦达到INT_MAX就会转向(这个特定的未定义构造的相当常见的表现形式,但依赖于此).