C 什么时候是&;;&;和++;评价的?
我有以下代码:C 什么时候是&;;&;和++;评价的?,c,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;
#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
}
#包括
内部主(空)
{
int a=0,b=0,c=0;
PrtTf(“%d n”),A++&B++ C++ +;//这里,A++给出0。C++仍然被评估。
printf(“%d%d%d\n”,a,b,c);//打印1 0 1
a=1,b=0,c=0;
printf(“%d\n”,a++| | b++&&c++);//这里,a++给出1,只对a++求值。
printf(“%d%d%d\n”,a,b,c);//打印2 0
}
为什么当&&的L.H.S.为0时,| |的R.H.S.会被计算?而在第二种情况下,| |的L.H.S.给出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++);
printf("%d\n", a++ || (b++ && c++));
希望这能让你更清楚。你的问题应该得到回答