1、原创文章来源: 原创文章来源:C 语言初学者入门讲座【4】运算符和表达式运算符的种类、优先级和结合性C 语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使 C 语言功能十分完善。 这也是 C 语言的主要特点之一。C 语言的运算符不仅具有不同的优先级, 而且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此也增加了 C 语言的复杂性。运算符的种类 C 语言的运算符可分为以下几类:1.算术运算符
2、用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余 (或称模运算,%)、自增(+)、自减(-)共七种。2.关系运算符用于比较运算。包括大于()、小于(=)、小于等于()六种。5.赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(p=(i+)+(i+)+(i+);q=(+j)+(+j)+(+j); 这个程序中,对 P=(i+)+(i+)+(i+)应理解为三个 i 相加,故 P 值为 15。然后 i 再自增 1 三次相当于加 3 故 i 的最后值为 8。而对于 q 的值则不然,q=(+j)+(+j)+(+j)应理解为 q 先自
3、增 1,再参与运算,由于 q 自增 1 三次后值为 8,三个 8 相加的和为 24,j 的最后值仍为 8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。 一个表达式有一个值及其类型, 它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。 单个的常量、变量、函数可以看作是表达式的特例。算术表达式原创文章来源: 原创文章来源:是由算术运算符和括号连接起来的式子, 以下是算术表达式的例子: a+b (a*2)c (x+r)*8-(a+b)7 +i sin(x)+sin(y) (+i)-(j+)+(k-)赋值运算符和赋值表达式简单赋值运算符和表达式,简
4、单赋值运算符记为“=” 。由“= ”连接的式子称为赋值表达式。其一般形式为: 变量=表达式 例如:x=a+bw=sin(a)+sin(b)y=i+-j 赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此a=b=c=5可理解为a=(b=(c=5)在其它高级语言中,赋值构成了一个语句,称为赋值语句。 而在 C 中,把“=”定义为运算符,从而组成赋值表达式。 凡是表达式可以出现的地方均可出现赋值表达式。例如,式子 x=(a=5)+(b=8)是合法的。它的意义是把 5 赋予 a,8 赋予 b,再把 a,b 相加,和赋予 x ,故 x 应等于 13。在 C 语言中也可以组成赋
5、值语句,按照 C 语言规定, 任何表达式在其未尾加上分号就构成为语句。因此如 x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。如果赋值运算符两边的数据类型不相同, 系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:1.实型赋予整型,舍去小数部分。前面的例 2.9 已经说明了这种情况。2.整型赋予实型,数值不变,但将以浮点形式存放, 即增加小数部分( 小数部分的值为 0)。3.字符型赋予整型,由于字符型为一个字节, 而整型为二个字节,故将字符的 ASCII码值放到整型量的低八位中,高八位为 0。4.整型赋予字符型,只把低八位赋予字符量。void ma
6、in()int a,b=322;float x,y=8.88;原创文章来源: 原创文章来源:char c1=k,c2;a=y;x=b;a=c1;c2=b;printf(“%d,%f,%d,%c“,a,x,a,c2);int a,b=322;float x,y=8.88;char c1=k,c2;printf(“%d,%f,%d,%c“,a=y,x=b,a=c1,c2=b); 本例表明了上述赋值运算中类型转换的规则。a 为整型,赋予实型量 y 值 8 88 后只取整数 8。x 为实型,赋予整型量 b 值 322, 后增加了小数部分。字符型量 c1 赋予 a 变为整型,整型量 b 赋予 c2 后取
7、其低八位成为字符型 (b 的低八位为 01000010,即十进制 66,按 ASCII 码对应于字符 B)。复合赋值符及表达式在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如 +=,-=,*=,=,%=,=,y=(x=a+b),(b+c);printf(“y=%d,x=%d“,y,x);a-2,b-4,c-6,x-0,y-0x-a+b,y-b+c 本例中,y 等于整个逗号表达式的值,也就是表达式 2 的值,x 是第一个表达式的值。对于逗号表达式还要说明两点:原创文章来源: 原创文章来源:1.逗号表达式一般形式中的表达式 1 和表达式 2 也可以又是逗号表达式。例如: 表达式 1,(表达式 2,表达式 3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式 1,表达式 2,表达式 n 整个逗号表达式的值等于表达式 n 的值。2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。