/=、%=、|=、^=、&=、>>=、<<= 逗号 二、表达式 用运算符将运算对象连接形成的式子称为表达式;从构成表达式的运算符来划分,它们主要包括以下类型表达式: 算术表达式、赋值表达式、关系表达式、逻辑表达式、逗号表达式、条件表达式等,表达式是描述数据加工的一种方法。 C语言中的表达式是由运算对象和运算符组成的,每个表达式都可以按照其中的运算符的优先级别和运算规则依次对运算对象进行运算,最终会有一个值,该值称为表达式的值 表达式值的数据类型就称为表达式的数据类型。由于表达式计算结果可能是整型、实型和逻辑型,故表达式的数据类型也可以分为整型、实型和逻辑型C语言中逻辑型的数据都是用整数来表示的,因此表达式类型实际上只区分为整型和实型合称为数值型,在程序或语句中使用表达式时,要按照语法和表达式的位置来确定表达式的准确类型 C语言表达式中的所有成分都是写在一行上,没有分式,也没有上下标,括号也只用圆括号()({}[]作其它用)如数学公式: , 1 自左向右 a + b a – b
26
应写成(a+b)/ (a-b)其中括号不能省
三、运算符和表达式的应用 1. 算术运算符和表达式
如:设有整型变量a=2,字符型变量c=’a’,单精型实型变量f=3.0,则下列表达式都为算术表达式
a+2-a*6/f+c%a (由常量和变量构成,表达式的值为1.0)
(a<=f)+5 (由常量和关系表达式构成,表达式的值为6)
(!a&&1)*f (由变量和逻辑表达式构成,表达式的值为0.0)
-((a>2)?3:2) (由条件表达式构成,表达式的值为-2)
(a=2)*f (由变量赋值表达式构成,表达式的值为6.0)
(1,2)-a (由变量和逗号表达式构成, 表达式的值为0)
算术运算符优先级规定为:
? 单目基本算术运算符优先于双目基本算术运算符 ? *、/、% 优先于 +、-
? 同级单目基本算术运算符的结合方向是自右向左 ? 同级双目基本算术运算符的结合方向是自左向右
27
2、赋值运算符和表达式
是由赋值运算符或自反赋值运算符连接的表达式具体规则为: (1)变量=表达式
(2)变量=自反赋值运算符 表达式
例:如上述条件则下面的都为赋值运算符和表达式
f*=a+2 (由算术表达式构成,表达式的值为12.0)
d=a<=c (由关系表达式构成,表达式的值为1) d=!(a==0) (由逻辑表达式构成,表达式的值为1) d=(a>0)?2:1 (由条件表达式构成,表达式的值为2) e=f+2.1 (由赋值表达式构成,表达式的值为5.1)
e=(a,c,f,0) (由逗号表达式构成,表达式的值为0.0)
结合方向为自右向左如x=y=5等价于x=(y=5)
若两边的类型不一致,则先将右边的表达式值的类型自动转换成左边变量的类型,然后再赋值见例chang.c 在C语言中允许不同的数据类型进行混合运算,即整型、实型、和字符型数据可以出现在同一个表达式中,但要遵循一定的原则,使运算符两边的操作数具有相同的类型。转换原则是:将运算符两边的数据根据如图原则转换成为它们之中数据较长的数据类型,以保证运算精度不会降低
28
double int 两个原则: 1、垂直降落:若是char型,则必须转为int型、若是float型,则必须先转换成double型,然后再进行下一步的运算; 2、向上位移:将int 型、long型、 double型看成为由低到高的三个台阶,若是相同类型的数据,也即为处于同一层,则系统不进行转换而直接运算,运算的结果类型是该数据类型。若数据类型不同,即处于不同阶层,则系统将其中低级别类型的数据统一到高级别的类型,然后再运算,而且运算结果是高级别类型 3、逗号运算符和表达式 由逗号运算符连接表达式构成的具体的规则如下 表达式1,表达式2 其中的表达式1,表达式2一般是同一类型的表达式见上机例dou.c 如下例题例:条件如上述则下面的都为逗号运算符和表达式 a+2,c+2 (由算术表达式构成,表达式的值为99)
29
long a<=c,f>=c (由关系表达式构成,表达式的值为0) !(a==0),f!=0&&c==’A’ (由逻辑表达式构成,表达式的值为0) (a>0?0:1),(a<0?1:2) (由逻辑表达式构成,表达式的值为2) d=f+2.1,e=a-10 (由逻辑表达式构成,表达式的值为-8.0)
a,c,f,10 (由逻辑表达式构成,表达式的值为10) 逗号运算符的优先级为15,是所有的运算符中最低的运算符,逗号运算符的结合方向为自左向右 4、关系运算符和表达式
用关系运算符将两个表达式连接的式子,具体构成的规则如下: 表达式 关系运算符 表达式
关系运算符有6种,前4种关系运算符的优先级别相同,后两种也相同,前4种高于后两种
关系运算符的优先级低于算术运算符 关系运算符的优先级高于赋值运算符
关系表达式的值是一个值,以1代表“假”,以0代表“真”当关系式成立时,表达式的值为1;当关系式不成立时,表达式的值为0。
如下例题例:条件如上述则下面的都为关系运算符和表达式 a+2!=c-100 f/3<=a-c (由算术表达式构成,表达式的值为1、0)
a<=(f<=c) (a>c)>=(f>4)(由关系表达式构成,表达式的值为0、1)
30