编程论坛
注册
登录
编程论坛
→
C语言论坛
运行包含以下代码段的程序将可能进入死循环,为什么是错的?
成诺
发布于 2022-11-05 19:36, 1174 次点击
int i = 1;
while(i>0){ i++; printf("%d ",i); }
2 回复
#2
不会游泳的虾
2022-11-05 22:11
理论上这段代码是死循环,因为判断条件是 i > 0 ,循环体里 i++ ,所以 i 的值是始终大于 0 的。但计算机硬件位数是有限的,那么当 i 增长到超出所能表达的数据范围的数时溢出,i 的值就出现 i < 0 的情形,此时就不满足循环的条件了,退出循环。上面的代码稍加改造,可以去运行下,供参考:
程序代码:
#include
<stdio.h>
int
main()
{
int
i =
1
;
while
(i >
0
){ i+=i; printf(
"
%d
"
,i); }
return
0
;
}
[此贴子已经被作者于2022-11-5 22:13编辑过]
#3
rjsp
2022-11-05 22:12
具符号整型的溢出属于未定义行为。
编译器无须考虑i的溢出,那么在i不溢出的情况下,必然i>0成立。
即 while(i>0) 可优化为 while( true )
1