当超出 C 中的整数范围时会发生无限循环
Indefinite loop occurs when out of integer range in C
我的问题是,当我们尝试打印从 0 到 32767 的数字时,为什么会出现无限循环,
为什么返回-32767 并重新开始打印。
程序代码-
main(){
int i;
for(i=0; i<=32767; i++){
printf("%d\n", i);
}
}
因为 32767 是 16 位整数的最大值。
在将其递增 1 之后,您还期望它的值是什么?
在您的环境中,int 类型对象 (INT_MAX
) 的最大值似乎等于 32767。因此 i 等于 32767
for(i=0; i<=32767; i++){
在求值表达式i++
之后,i的内部表示的符号位被置位,i变为负值-32768,即INT_MIN
在这种情况下条件
i<=32767
将产生 true。
我的问题是,当我们尝试打印从 0 到 32767 的数字时,为什么会出现无限循环,
为什么返回-32767 并重新开始打印。
程序代码-
main(){
int i;
for(i=0; i<=32767; i++){
printf("%d\n", i);
}
}
因为 32767 是 16 位整数的最大值。
在将其递增 1 之后,您还期望它的值是什么?
在您的环境中,int 类型对象 (INT_MAX
) 的最大值似乎等于 32767。因此 i 等于 32767
for(i=0; i<=32767; i++){
在求值表达式i++
之后,i的内部表示的符号位被置位,i变为负值-32768,即INT_MIN
在这种情况下条件
i<=32767
将产生 true。