有符号整数中的INT_MAX + 1 = INT_MIN吗?

0 c unsigned signed

for (i = 0; i <= N; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

如果N为,则该特定语句将导致无限循环INT_MAX.已经知道无符号溢出正在包装溢出,假设iN无符号,编译器可以假设N+1如果i在溢出时未定义,则循环将完全迭代.这里需要注意的是:如果我将循环设为,

for (i = 0; i < N; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)

这仍然是未定义的行为吗?

为什么在签名整数的情况下INT_MAX + 1肯定不相同INT_MIN

oua*_*uah 5

INT_MAX + 1

此操作调用未定义的行为.有符号整数溢出是C中未定义的行为.

它可能导致INT_MIN或实现可以认为此表达式为正或程序可能崩溃.不要让便携式程序计算这个表达式.