&& (逻辑与) 优先级高于||(逻辑或)
1、return a && b || c
根据a来判断返回值,a是false则肯定返回c;如果b , c都是true,那么就可以根据a来决定b还是c,如果a是false则返回c,如果a是true则返回b。
2、return a || b && c
根据优先级相当于先算b && c ,然后和a相或;如果a是true,则返回a,不论是b或c,如果a是false,则如果b是false,返回b,如果b是true,返回c。
运算符优先级的记法
C语言把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理,可见其范围的宽(如:将赋值符“=”作为赋值运算符、方括号作为下标运算符)。
优先级与求值顺序无关。如a+b && b*c,虽然*优先级最高,但这个表达式求值顺序是从左到右。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。
基本的优先级需要记住:指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。逻辑运算最后结合。
以上内容参考 百度百科--运算符优先级
&&的优先级要高与||。
&&有点类似于*,||类似于+。
逻辑运算符里!的优先级最高。
下面有个完整的C++的优先级及结合律的链接。
优先级和结合性只是告诉编译器要在哪里补上括号,也就是把表达式换成以下形式
k = (((a+1)>0) || (((++a)<0) && (!((b--)<=0))))
但是对于这里的(a+1)和(++a)这样都是最小的表达式,应该先算哪一个,除了特殊情况之外,标准允许编译器自行处理。
这里就有一种特殊情况:如果表达式中含有||,总是先算 || 左边的子表达式,这里是((a+1)>0)永远先于(((++a)<0) && (!((b--)<=0)))计算(并且由于优先级,先计算a+1,再与0比较,而不是先将1与0比较,再和a相加),如果 || 左边的子表达式可以确定 || 运算后的值,就不再计算右边的子表达式
&& 的优先级大于 ||
&&的优先级高于||
如果需要发所有优先以及结合方向联系俺