【发布时间】:2013-10-15 08:38:58
【问题描述】:
for (i = 0; i <= N; ++i) { ... }
如果 N 为 INT_MAX,此特定语句将导致无限循环。
知道无符号溢出正在包装溢出,假设 i 和 N 为无符号,编译器可以假设如果 i 在溢出时未定义,则循环将精确迭代 N+1 次。
这里要注意的是:如果我将循环设为,
for (i = 0; i < N; ++i) { ... }
这仍然是未定义的行为吗?
在有符号整数的情况下,为什么INT_MAX + 1 不一定等于INT_MIN?
【问题讨论】:
-
因为 C 中的位溢出是未定义的行为