C语言程序设计案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第3章 运算符和表达式

运算符是指对常量或变量等操作对象进行运算所用的运算符号。运算符可以按照操作对象的数目分类,也可以按照功能来分类。表达式是变量、常量等操作对象与运算符进行结合的表达方式。C语言中,这些结合执行并产生某些计算结果。表达式可用于逻辑和数学运算,也可以作为程序控制的条件。

本章的学习重点:

◆ 运算符与表达式的分类。

◆ 算术运算符与算术表达式。

◆ 逻辑运算符与逻辑表达式。

◆ 关系运算符与关系表达式。

◆ 位运算符。

◆ 条件运算符。

◆ 强制类型转换。

3.1 运算符与表达式的分类

运算符的种类多种多样,可按照操作对象数目分类,也可按照功能分类,本书重点介绍后一种。

3.1.1 运算符的分类

按照操作对象的多少,运算符主要可分为一元运算符、二元运算符和三元运算符。例如负号(-)为一元运算符,加号(+)为二元运算符等。如表3-1所示为不同类型运算符的分类。除了这些基本运算符之外,C语言还支持复合运算符以及sizeof运算符等。

按照功能分类,运算符可分为:算术运算符、赋值运算符、逻辑运算符、关系运算符、条件运算符、位运算符、取字节数运算符等。

1. 算术运算符

与数学计算中的数学符号类似,算术运算符主要用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、负号(-)、求余(或称模运算%)、自增(++)、自减(--)共八种。

表3-1 运算符分类

2. 赋值运算符

赋值运算符主要用于赋值操作,分为简单赋值运算符(=)、复合算术赋值运算符(+=,-=,*=,/=,%=)和复合位运算赋值运算符(&=,|=,^=,>>=,<<=)三类共十一种。

3. 逻辑运算符

逻辑运算符主要用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

4. 关系运算符

关系运算符主要用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。

5. 位运算符

位运算符是指将参与运算的对象按二进制位进行运算。包括位与(&)、位或(|)、位反(~)、位异或(^)、左移(<<)、右移(>>)六种。

6. 条件运算符

条件运算符是到目前为止C语言中唯一的一个三元运算符,也称为三目运算符,用于条件求值(? :)。

7. 取字节数运算符

取字节数运算符sizeof也是C语言的一个特殊运算符,它用于计算对象(可以是常量、变量及复合数据类型等)在计算机内存中所占的字节数。有的资料也把它当作函数看待,但C语言系统中,sizeof是一个运算符。

8. 其他运算符

另外,C语言中还有逗号运算符(,)、数组下标运算符([])以及结构体成员运算符(.和→)等。

3.1.2 表达式的分类

C语言中,表达式实际上是一种有值的语法结构,它一般由运算符将变量、常量或函数返回值结合而成。通常,表达式可作为程序执行过程中的某个操作步骤,或者计算的表达形式。另外,有些表达式会生成某种类型的数值,并将该值赋给某个变量或与其他表达式进行比较等逻辑操作。表达式按照运算符的不同进行分类,主要有:算术表达式、赋值表达式、逻辑表达式和关系表达式等。

1. 算术表达式

算术表达式由算术运算符和控制运算优先级的括号连接而成。算术表达式是进行算术运算的基本表达形式。例如:

3.14159*r

(a+b)/c+d*m

其中,符号*表示算术运算“乘”,/表示算术运算“除”。

2. 赋值表达式

赋值表达式一般由赋值运算符、算术运算符和操作对象组合而成,由简单的赋值运算符“=”连接起来,一般形式为:

变量 = 表达式或数值 或者

变量1 = 变量2 = 变量3 = 表达式或数值

例如:

a = x + 12

a1 = a2 = a3 = 100

b += 12

第一个表达式表示将x+12的值赋给a,第二个表达式表示将数值100分别赋给a1,a2和a3,第三个表达式表示将b+12计算的值重新赋给b。

3. 逻辑表达式

逻辑表达式一般由逻辑运算符和操作对象组合而成,逻辑表达式是C语言中进行逻辑判断的主要表达形式,也是条件控制语句中常用的控制表达式之一。如下都是逻辑表达式:

a && b

c || d && m

!x

第一个表达式表示a和b的与运算;第二个表达式表示c和d先求或运算,然后结果再和m进行与运算;第三个表达式表示求x的非运算。

4. 关系表达式

关系表达式一般由关系运算符和操作对象组合而成,和逻辑表达式类似,关系运算符也是C语言中进行数值判断的主要表示形式,同时也是条件控制语句中应用非常广泛的控制表达形式之一。如下都是关系表达式:

a > b

c <= d

m = = n

第一个表达式表示算术关系运算,判断a是否大于b,第二个表达式判断c是否小于等于d,第三个表达式判断m和n是否相等。

5. 逗号表达式

逗号表达式由其他表达式和逗号运算符组成。逗号表达式常用于变量定义。例如:

int a, b, c;

其中a, b, c就属于逗号表达式。再如:

a = 12, b = 100, c = a+b

需要说明的是,逗号表达式的值总是等于最后一个表达式的值。例如有如下定义与赋值:

int a, b, c, sum;

sum = (a =12, b = 100, c = a+b);

赋值之后,sum的值将等于赋值号右边表达式a =12, b = 100, c = a+b的值,该表达式是逗号表达式,其值为最后一个表达式的值,即c = a+b。c = a+b是一个赋值表达式,其值为c的值,即为a加b的和112。因此sum的值为112。

6. 复合表达式

复合表达式是几种简单表达式的组合,是比较复杂的表达式,例如:

num = 12 + b + (c = 35/(d = 7))

该表达式是一个赋值表达式,但赋值号右边又是比较复杂的算术表达式。在C语言中,复合表达式应用非常广泛。