C 运算符与表达式

 

  运算(操作)是对数据的加工。最基本的运算形式常常可以用一些简洁的符号来记忆,这些符号称为运算符或操作符。被运算的对象-数据称为运算量或操作数。表达式描述了对哪些数据、以什么顺序以及施加什么样的操作。运算量可以是常量,也可以是变量,还可以是函数。

  C语言中提供了丰富的运算符,能够构成多种表达式,它把许多基本操作都作为运算符处理。例如,C语言把赋值符作为赋值运算符。

  学习运算符时应该注意以下几点:

  (1)运算符的功能。

  (2)运算符与运算量的关系。

  (3)运算符的优先级。

  (4)运算符的结合性。

  (5)运算的结果类型。

  2.3.1  算术运算

  1.双目算术运算符:+ 、- 、* 、/ 、%

  (1)功能:+、-、*、 /、 %的功能分别是加、减、乘、除、求模。

  (2)优先级:*、 /、 %同级别,+、- 同级别但低于 *、 /、 %。

  (3)结合性:左结合性。

  (4)结果类型:相同类型的数据的运算结果仍为相同类型,不同类型的数据的运算结果为类型较高的一种类型。

  (5)自反算术赋值运算符:+=、-=、*=、/=、%=

  (1)结合性:右结合性。

  (2)优先级:同赋值运算符的优先级。例如,b*=a+2等价于b=b*(a+2),而不等价于b=b*a+2。

  注意:C语言的简洁性提高了程序的效率,但也造成了阅读与理解程序的困难。我们建议有限制地使用自反算术运算符,或者只在不会造成误解的地方使用,或者用圆括号加以说明。

  2.自加和自减运算符:++、--

  (1)前缀形式:先增值后引用。例如,设变量x的值为2,则执行赋值表达式y=++x后变量x和y的值分别为3和3。

  (2)后缀形式:先引用后增值。例如,设变量x的值为2,则执行赋值表达式y=x++后变量x和y的值分别为3和2。

  (3)优先级:优先级比较高,高于双目或三目运算符。

  (4)结合性:右结合性。

  注意:自加自减运算符的运算对象只能是整型变量而不能是表达式或常量。例如,5++和(x+y)++都是错误的表达式。

  3.正负号运算符:+、-

  正负号运算符属于单目运算符,其优先级比较高,高于双目运算符的优先级,结合性为右结合性。

  2.3.2  关系运算、逻辑运算和条件运算

  1.关系运算符:>、<、>=、<=、!=、==

  (1)优先级:所有关系运算符的优先级都比算术运算符低而比赋值运算符高,前4种关系运算符的优先级比后2种关系运算符的优先级高。

  (2)结合性:左结合性。

  (3)关系表达式的值:关系表达式的结果为“真”时用1表示,用“假”时为0表示。例如,关系表达式0.2<0.5<1.0的值为0。

  注意:

  (1)字符数据的比较按其ASCII码值进行。

  (2)在判断两个浮点数是否相等时,由于存储器上的误差,会导致错误的结果。例如,关系表达式1.0/90*3*3*10==1.0的结果为0,而不是1。解决的方法是判断两者之差的绝对值小于某个小常数。

  2.符:!、&&、||

  (1)优先级:逻辑运算符“&&”和“||”的优先级比关系运算符低但比赋值运算符高,逻辑运算符“!”的优先级比所有的双目运算符高。逻辑运算符“&&”的优先级比运算符“||”的优先级高。

  (2)结合性:逻辑运算符“&&”和“||”是左结合性,单目运算符“!”是右结合性。

  (3)逻辑表达式的值:逻辑表达式的结果为“真”时用1表示,为“假”时为0表示。注意:C语言在进行逻辑运算时把非0作为“真”,把0作为“假”。

  注意:在C语言中,由逻辑运算“&&”和“||”组成的逻辑表达式,在特定的情况下会产生“短路”的现象。(1)在一个“&&”表达式中,若“&&”的一端为0,则不必再计算另一端,该表达式肯定为0。由于“&&”的结合性为左结合性,因此如果左端为0时,不再计算其右端。(2)在一个“||”表达式中,若“||”的一端为1,则不必再计算另一端,该表达式肯定为1。由于“||”的结合性为左结合性,因此如果左端为1时,不再计算其右端。

  3.件运算符:? :

  (1)条件运算符是C语言中唯一具有三个操作对象的运算符,它的功能是一种在两个表达式的值中选择一个的操作。它的语法格式为:

  e1?e2:e3

  它的操作过程为:先计算表达式e1的值,若e1为“真”(非0),则整个表达式的值为表达式e2的值,否则整个表达式的值为表达式e3的值。例如,表达式b>0?a+b:a-b表示求a+|b|的值;表达式max=a>b?a:b表示求a和b中最大的数。

  (2)优先级:比赋值运算符和逗号运算符高,但比所有的其它运算符低。

  (3)结合性:右结合性。

  注意:整个表达式的结果类型为e2与e3二者中类型较高的一种类型。例如,表达式y<3?-1.0:2的结果类型为实型。

posted @ 2016-01-08 11:06  御剑青冥  阅读(382)  评论(0编辑  收藏  举报