在下面的代码中,我期待回答“是”'。但答案是肯定的。这意味着我和&&&操作。我期待一旦if()中的整个表达式被计算,我就会增加。那么与后期增量相关的规则是什么?
int main()
{
int i = 1;
if (i++ && (i == 1))
printf("Yes\n");
else
printf("No\n");
}
答案 0 :(得分:3)
逻辑AND运算符&&
在左操作数和右操作数的求值之间有一个序列点。这意味着首先评估左操作数,以及任何副作用(在这种情况下是增量)。
在此表达式中,i
以值1开头。因此表达式i++
的值为1,i
的值递增。
由于&&
运算符的左侧此值的计算结果为true,因此将评估右侧。如果值为0,即为假,则不评估右侧。
此时i
的值为2,因此i == 1
的计算结果为false,导致&&
运算符的结果为false。这导致else
子句被执行。
答案 1 :(得分:0)
它从左到右,从上到下编译,所以你有'否'是合乎逻辑的,你的if
语句包含i++
,这将导致i等于2并且然后返回true
,然后它包含i==1
,它将返回false
,因为我不再等于1,所以你的if
语句返回false,这将使它执行的是什么在else
上,表示“否”。
关于逻辑运算符的简单解释:
&&:从左到右进行评估,所有评估的条件必须返回'true',因此它可以为真。
||:从左到右进行评估,除了它一旦找到一个真实条件就以true结束评估。