在if语句的表达式中增加post

时间:2017-08-10 02:02:58

标签: c mingw32

在下面的代码中,我期待回答“是”'。但答案是肯定的。这意味着我和&&&操作。我期待一旦if()中的整个表达式被计算,我就会增加。那么与后期增量相关的规则是什么?

int main()
{
    int i = 1;
    if (i++ && (i == 1))
        printf("Yes\n");
    else
        printf("No\n");
}

2 个答案:

答案 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结束评估。