36 第五章运算符、优先级和合性 第五章运算符、优先级和结合性 5.1简介 ·运算符是表示对数值进行一种运算的符号。 运算符可对操作数进行运算。操作数是一个数值,既可以是常量也可以是变量。 C+包含一个丰高的运算符集。有些运算符带有一个操作数,有些则带有两个操作 数:有些运算符本身是专用的,而有些则是由其它运算符派生出来的:有些运算符甚至是 重载(0 verloaded))的.这意味着相同的运算符可能表示不只一种运算.编译器能从使用该 操作的上下文关联中来理解要执行的怡当的运算 很难找到一个程序能将所有的运算符都用上,本章我们只讨论算术运算符、赋值运算 符、取模运算符、增量运算符和减量运算符等最基本的运算符。几乎所有的C+程序都 使用这些运算符 更特殊的运算符将要在后面的章节中讨论。 ■优先级指在程序中运算执行的先后顺序。 一条C+语句可能包含多个运算符,对它们所涉及的数据类型执行多重操作。而这 些运算必须按一定的先后顺序来执行,否则同一语句就会产生不同的结果正象使用括号 来指定算术运算中的运算符优先级(括号内的运算在括号外的运算之前执行)一样,C+料 语句中执行的运算优先级由运算符本身指定.本章将讲述运算执行时的优先级顺序。 5.2算术运算符、赋值运算符和取模运算符 其实在前面已经遇到过算术运算符和赋值运算符了。下面是一条使用加法(+)运算 符的简单语句: 8=5+5: 该语句中有三个操作数:8,5和5,第一个操作数是一个变量,其余两个则是常量, 最左边的操作数存放运算的结果。这样,a就得到5和5作加法运算的结果,即10,加 法运算符用于将左右两边的操作数加起来。 下面是一段使用其余的数学运算符的简短程序: //test5-1.cpp #include <iostream.h> main( int a,b,c,d; a=5+3/加法运算符 b=8-2;/域法运算符 c=a+b;/加法运算符 d-c/2: //除法运值符 e-d4/秉法运算符
第五章运算符、优先级和结合性 37 f=eX5;/模除运算符 cout<<“ais"a<\n cout(“bis((b<(n cout(“cis”<<c<\n cout<“is"<d<"\n cout<“eis"<ex"\n cout<“fis“<f<\n” 1 编译并运行这段程序将得到如下输出结果: a is 8 b is 6 c is 14 d is 7 e is 28 f is 3 大概除了最后一条输出结果外,都用不者解释 ■取模运算符用来得到除法的余数而不是商。 ©的内容(卿28)拉5除.商是5,丢弃不用,余数是3,余数放到变量「中. 5.3增量和减量运算符 语句: a-a+l; 也可以这样表达: a+: a艹利用了增量运算符(艹).这两条语句的结果是一样的,都是将:加1. 同样,语句 b-b-1 也可以这样表达: b-; b一利用了域量运算符(一). 在上面的例子中,增量和诚量运算符都放在后缀(即跟在操作数后面)的位置上.这 些运算符也可以放在前缀位置上,如: +a; -b 前后缀运算的效果是不同的。如果用另外一个变量来存放运算结果,这两种形式的差 异就更容易理解了。假定a中存放10,语句:
38 第五章运算符。优先级和结合性 将10存放到c中,然后a增加1,最终结果将如下: 变量 内容 c 10 11 另一方面,语句 C=++a: 导致a先增加1,然后将a的新值存放到c中,两个变量变成这样: 变量 内容 c 11 11 现在我们将前后两种语句用减量运算符来修政,假定这时b中存有20: c=b-: 结果就是: 变量 内容 20 h 19 用前缀形式: cs—b 得到如下结果: 变量 内容 b 19 5.4复合运算符 按照前一节的解释,表达式 b-b+l; 能表示成 b-b+* C+艹也允许我们使用下面的与之等效的表达式: b+-l; 句法是这样的: 变量运算符=表达式 这种句法类型可以适用于下列运算符 t
第五章运算符、优先级和结合性 39 因此,表达式 8=a●5: 也可以表示为 该句法也适用于位运算符,这将在本章后面详细讲述,这些运算符是 55■ K- 如 N= 5.5逻辑与运算符 。逻辑与运算符用符号&来表示】 逻辑与运算符用来执行一个或多个条件的逻辑组合 如果要对两个或多个条件进行求值,就用将它们结合起来。 例如,假定要对下列情况编码: 如果年龄小于或等于55岁,身体健康,则准予办理人寿保险 如果年龄小于或等于55岁,身体不健康,则不予办理人寿保险, 如果年龄大于55岁,则不予办理人寿保险。 这些条件可以用IP语句来编码。(将在下一章详细讲述IF语句),用逻辑与运算符 来组合这些条件,得出带要的结果.下面是实现上述功能的程序: (再者,如果您没能立即学会F语句的全部语法,用不着心,因为此种语句相当直 观,我想您无论如何都能理解它的含义.) //test5-2.cpp #include <iostream.h> mainO char life-insurance[1]; char health[1]: int age-50; health-'B'; if(age<-55 &health -'G') life-insurance-Y'; if(age<-55&&health-"B) life-insurance-'N'; if (age>55)
40 第五章运算符、优先级和结合性 life-insurance-N'; cout<<"Life insurance issued:"<<life-insurance<<"\n"; 程序输出: Life insurance issued:N 本程序中,声明了必要的变量,然后把health初始化为B,表示Bad;IF语句执 行了三次,第一条F语句,检查是吞年龄小于或等于55岁,并且身体健康。如果是的话 则将1ife.insurance赋值为YYes;第二条IF语句表示如果年龄小于或等于55岁,并 且身体不健康的话,则将life_insurance赋值为N(o),现在您就应该能猜出第三条IF 语句的含义 请注意: ■8运算符用来将两个条件组合在一起. ■品运算符左边和右边的条件都为真时,整个表达式的值才为真(记住,一个非0值表 示真,0表示假) 5,6逻辑或运算符 逻辑或运算符用符号川来表示。 川对它所结合的表达式求值,同与运算相似。不同之处是: ■ 任一条件为真,表达式的值就为真,条件都不为真时,结果同与运算符 前一节的程序用川运算符重写为: //test5-3.cpp #include <iostream.h mainO char life-insurance(1]; char health[1]; int age-50; health='B'; if(age<=55 health =='G) life-insurance-Y' if(age<-55&health -'B)(age>55) life-insurance=N'; cout<"Life insurance issued:"<life-insurance<"n" 程序输出为: