#include <stdio.h>
int main()
{
int k=5;
if(++k < 5 && k++ / 5 || ++k <= 8)
{
printf("%d",k);
}
return 0;
}
为什么输出7而不是8?(我是编程的初学者所以请耐心等待。)
答案 0 :(得分:5)
Operator precedence和逻辑表达式short circuit evaluation。
逻辑条件中的&&
比||
绑定得更紧密,因此您的条件相当于:
((++k<5 && k++/5) || ++k<=8)
当以有条理的方式呈现代码时,更容易阅读代码:
int main() {
int k=5;
if ((++k<5 && k++/5) || ++k<=8) {
printf("%d",k);
}
return 0;
}
现在是执行的一个小打击。
k
从5开始。++k<5
将k
提升至6,即不 <5
。&&
表达式的后半部分,因为0 && ANYTHING == 0
。||
的左侧是0,所以右侧不短路。必须对其进行评估。++k<=8
将k
提升至7, <=8
。||
的右侧是1。if
语句的“then”子句。 k
的当前值,即7。值得注意的是,&&
条款的后半部分可能没有按照您的意图行事。 k++/5
是整数除法,由于k>5
始终为k++/5
,因此>=1
始终为{{1}},因此始终为真。