上QQ阅读APP看书,第一时间看更新
4.2 优先级与结合性
微视频
前面几小节中介绍了各种运算符的含义及如何使用。但是,如果多个运算符一起使用,那么各种运算符的优先级和结合性又如何呢?本节将介绍运算符的优先级和结合性。
4.2.1 运算符优先级
运算符的种类非常多,通常不同的运算符可构成不同的表达式,甚至一个表达式中又可包含多种运算符,因此它们的运算方法应该有一定的规律性。C++语言中规定了各类运算符的运算优先级等,如表4-9所示。
表4-9 运算符的优先级
注意:在书写表达式的时候,如果无法确定运算符的有效顺序,则尽量采用括号来保证运算的顺序。这样可以使得程序一目了然,而且在编程时能够确保思路清晰。
【实例4.9】运算符优先级的应用(源代码\ch04\4.9.txt)。
#include <iostream> using namespace std; int main() { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a+b) * c/d; //(30 * 15)/5 printf("(a+b) * c/d 的值是 %d\n", e); e = ((a+b) * c)/d; //(30 * 15)/5 printf("((a+b) * c)/d 的值是 %d\n", e); e = (a+b) * (c/d); //(30) * (15/5) printf("(a+b) * (c/d) 的值是 %d\n", e); e = a+(b * c)/d; //20+(150/5) printf("a+(b * c)/d 的值是 %d\n", e); return 0; }
程序运行结果如图4-9所示。
图4-9 例4.9的程序运行结果
4.2.2 运算符结合性
前面介绍了运算符的优先级,知道了运算符优先级高的先运算,优先级低的后运算。那么,对于相同优先级的,又如何处理呢?为此,C++中引入了运算符结合性的概念。
运算符的结合性是指同一优先级的运算符在表达式中操作的组织方向,即当一个运算对象两侧运算符的优先级别相同时,运算对象与运算符的结合顺序。C++语言中规定了各种运算符的结合方向(结合性),大多数运算符的结合方向是“自左至右”,即先左后右。例如,a-b+c,b两侧-和+两种运算符的优先级相同,按先左后右结合方向,b先与减号结合,执行a-b的运算,再执行加c的运算。
除了自左至右的结合性外,C++语言还有三类运算符参与运算的结合方向是从右至左,即单目运算符、条件运算符、赋值运算符。下面用表4-10来说明运算符的结合性。
表4-10 运算符的结合性
续表
续表