我有以下代码:
#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,除此之外什么都没有评估?
答案 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++));
希望能让你更清楚。