2.1 运算符和表达式
C语言中有丰富的运算符:赋值运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、逗号运算符等
表达式是由运算对象和运算符组合起来的式子,且必须符合C语言的语法规则
表达式求值时应根据运算符的优先级和结合性
2.1.1赋值运算符及赋值表达式
赋值运算符:=
赋值表达式:变量 = 表达式 [由赋值运算符连接的式子,把右边表达式的值赋给左边的变量]
例如:
int i, j, k;
i= 0;
j =i +1;
说明:赋值运算符具有右结合性,表达式可以连续赋值。
例如:i = j = k 就等价于 j = k; i = j;这两条语句。
2.1.2算术运算符及算术表达式
C语言提供了如下算术运算符:加(+)、减或取负(-)、乘(*)、除(/)、取模或求余(%)、自增(++)和自减(――)7种。
算术表达式:由算术运算符连接起来的表达式称为算术表达式。
其中加(+)、减或取负(-)、乘(*)三种运算和一般数学中的运算规则一样;
除(/):当除数和被除数都是整型数据时,其结果只能是整型。
例如:7/2=3;而不是 7/2=3.5;[只有当除数或被除数中有一个是实型时,其结果才是实型]
取模或求余(%):只能对整型数据进行运算。
自增(++)和自减(――):
1)只能对简单变量类型进行运算,常量和表达式不能做这两种运算。
如5――,(x+y)++都是不合法的;
2)既可以出现在变量的右边,又可以 出现在变量的左边。必须注意它们的差别:
x++:在使用变量x之后再将x的值加1;
++x:在使用变量x之前先将x的值加1;
x――:在使用变量x之后再将x的值减1;
――x:在使用变量x之前先将x的值减1;
例如:int x = 1,y;
y = ++x;
printf(“\nx=%d,y=%d”,x,y);
运行结果是:
x = 2,y = 2
2.1.3关系运算符及关系表达式
C语言中有如下关系运算符:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(= =)、不等于(!=)
关系表达式:用关系运算连接几来的式子。
说明:
1)关系运算就是通过对操作数的值进行比较来判定是否符合条件,所以,关系表达式的结果只有两种即“真”和“假”,其中“真”用“1”表示、“假”用“0”表示。
2)一般字符的比较依据为字符的ASCII码。
例如:int a=(3>5); 结果:a=0
2.1.4逻辑运算符及逻辑表达式
C语言提供了3种逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!)。
逻辑表达式:用逻辑运算符连接起来的式子。
说明:
1)逻辑与(&&)、逻辑或(||)是双目运算,具有左结合性,逻辑非(!)是单目运算符,具有右结合性。
2)在逻辑表达式中,是根据形式逻辑的原理,通过逻辑运算符来对操作数的“真”(即非0值)“假”(即0值)值进行组合,其结果仍为逻辑“真”或“假”。
3)逻辑运算符的求值规则:
非0 非0 1 1 0
非0 0 0 1 0
0 非0 0 1 1
0 0 0 0 1
例如:int m = 2, n = 3;
则m&&n的值为1;
m | | n的值为1;
!m的值为0。
2.1.5条件运算符及条件表达式
条件运算符:?:
它是C语言中唯一的一个三目运算符,用来对条件求值,具有右结合性。
条件表达式:用条件运算符连接起来的式子。
其形式如下:
表达式1?表达式2:表达式3
运算规则:先计算表达式1,如果结果为真,则计算表达式2,并把表达式2的值作为整个表达式的值。否则,如果表达式1的值为假,则计算表达式3,并把表达式3的值作为整个表达式的值。
例如:要得到变量a与b之间的最小值,可以表示成:
min = (a < b) ? a : b; //如果a < b,则min=a,否则a>=b,则min=b
2.1.6逗号运算符及逗号表达式
逗号表达式是用逗号(,)把多个表达式连接起来组成一个表达式,求值时按从左到右的顺序。其形式为:
表达式1,表达式2,……,表达式n
执行过程为:先对表达式1求值,再对表达式2求值,……再对表达式n求值,并把表达式n的值作为整个逗号表达式的值。
优先级:逗号运算符在所有运算符中的优先级最低,具有从左到右的结合性。
特别说明:逗号并不是在任何地方出现都是逗号表达式,它也可以作为分隔符,要注意分清。
2.2运算符的优先级和结合性
[当一个表达式由多个运算符组成时,如何能得到正确结果,这就是运算符的优先级和结合性问题]
2.2.1数据类型转换规则
[不同的基本数据类型的变量混合运算时,怎样确定该表达式的数据类型,这就是如何进行类型转换的问题]
数据类型转换分自动转换和强制转换两类。
1)自动转换:这类转换由C编译系统自动完成;其原则是保证数据的精度不降低,所以,数据转换按数据存储长度增长的方向进行。
2)强制转换:将结果转换为自己所希望的数据类型。形式为:
(类型名)(表达式)——即可将表达式的类型转换为指定的(类型名)
说明:强制转换只对本次运算有效,并不改变变量本身定义时所规定的类型。
例如:float x = 4;
int y = 2;
进行运算:(int)x / y 其结果为2;但运算后x的类型仍为实型,而不会变成int型。
[声明:本资源来自网络,如有侵权,请告知!]