You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于while循环表达式等价性的疑问:i>0为真时两段代码为何等价?

为啥这两段while循环在i>0时等价?

嘿,这个问题问到点子上了,核心就藏在后置递减运算符i--的执行逻辑里,咱们结合具体例子拆解就一目了然了:

先看第一段代码的执行流程

while(i > 0) { 
    printf("Hello \n"); 
    i--; 
};

这段逻辑很直白:

  • 每次进入循环前,先判断i > 0是否成立
  • 如果成立,就执行打印操作,然后把i减1
  • 直到i变成0,i>0不成立,循环终止
  • 循环结束后,i的值是0

再看第二段代码的关键细节

while(i--) { 
    printf("Hello \n"); 
};

这里的i--是后置递减运算符,它的执行顺序是:

  1. 先返回i当前的原始值,用这个值作为循环条件的判断依据(C语言里非0即为真,0为假)
  2. 完成判断后,再把i的值减1

因为题目已经明确初始i > 0,咱们拿初始i=3来举例子对比:

循环轮次第一段代码(i>0)第二段代码(i--)
第1轮判断3>0→真,打印,i变2返回3→真,打印,i变2
第2轮判断2>0→真,打印,i变1返回2→真,打印,i变1
第3轮判断1>0→真,打印,i变0返回1→真,打印,i变0
第4轮判断0>0→假,循环终止返回0→假,循环终止

你看,两轮循环的打印次数完全一致,都是执行了初始i值的次数。唯一的区别是循环结束后i的值:第一段结束后i=0,第二段结束后i=-1,但如果只看循环体(打印操作)的执行效果,两者是完全等价的——这也是题目里“等价”的核心含义。

简单总结:初始i>0时,两段循环都会执行i初始值次数的打印,因为第二段的i--在每次循环时,先用原始值判断(等价于第一段的i>0判断,因为原始值是正的),然后再减1,和第一段循环里“打印后减1”的最终效果(循环体执行次数)完全一致。

内容的提问来源于stack exchange,提问作者Tolis M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:24:00