何时是R.H.S.和&&和++评估?

时间:2014-07-21 14:03:37

标签: c

我有以下代码:

#include <stdio.h>
int main(void)
{

    int a = 0, b = 0, c = 0;
    printf("%d\n", a++ && b++ || c++); //Here, a++ gives 0. Still, c++ is evaluated.
    printf("%d %d %d\n", a, b, c); //Prints 1 0 1

    a = 1, b = 0, c = 0;
    printf("%d\n", a++ || b++ && c++); //Here, a++ gives 1 and only a++ is evaluated.
    printf("%d %d %d\n", a, b, c); //Prints 2 0 0
}

为什么当L.H.S.和&amp;&amp;得到0,R.H.S。 of ||评估?而在第二种情况下,L.H.S。 of ||给出1,除此之外什么都没有评估?

1 个答案:

答案 0 :(得分:1)

这是因为运营商的优先权。首先评估&&,然后评估||

printf("%d\n", a++ && b++ || c++);

相当于

printf("%d\n", (a++ && b++) || c++);


printf("%d\n", a++ || b++ && c++);

相当于

printf("%d\n", a++ || (b++ && c++));

希望能让你更清楚。