所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁。
运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。
此外运算符还有“目”和“结合性”的概念,这个很简单。“目”就是“眼睛”的意思,一个运算符需要几个数就叫“几目”。比如加法运算符+,要使用这个运算符需要两个数,如 3+2。对+而言,3 和 2 就像它的两只眼睛,所以这个运算符是双目的。
C语言中大多数的运算符都是双目的,也有单目和三目的。单目运算符比如逻辑非,如!1,它就只有一只眼睛,所以是单目的。整个C语言中只有一个三目运算符,即条件运算符? :
。
那么“结合性”是什么呢?上面讲的优先级都是关于优先级不同的运算符参与运算时先计算谁后计算谁。但是如果运算符的优先级相同,那么先计算谁后计算谁呢?这个就是由“结合性”决定的。
【运算符优先级和结合性一览表】
上表中可以总结出如下规律:
1、结合方向只有优先级2、13、14三个是从右往左,其余都是从左往右。
2、所有双目运算符中只有赋值运算符的结合方向是从右往左。
3、另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是所有单目运算符,一个是三目运算符。
4、C语言中有且只有一个三目运算符。
5、逗号运算符的优先级最低,要记住。
6、此外要记住,对于优先级:算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。