文档介绍:第 4 讲运算符与表达式
数据类型的转换
1. 目的、要求
掌握运算符、表达式、优先级、结合性等概念;
掌握赋值表达式、逗号表达式;
掌握数据类型的转换。
2. 重点、难点
数据类型的转换;
自加、自减运算;
优先级和结合性;
赋值表达式与逗号表达式。
一般练习
,
重点练习
,,
实验2
运算(操作)是对数据的加工,通过对运算符的介绍,引入优先级的概念。重点介绍数据类型的转换,自加/自减运算,优先级和结合性, 赋值表达式、逗号表达式。
3. 讲课思路
运算符与表达式
13 类运算符
算术运算符:+,-,*,/,%,++,--
关系运算符:>,<,>=,<=,==,!=
逻辑运算符:!,&&,||
位运算符:<<,>>,~,|,^,&
赋值运算符:=
条件运算符:? :
逗号运算符:,
指针运算符:*,&
求字节数运算符:sizeof
强制类型转换运算符:类型
分量运算符:.,->
下标运算符:[ ]
其它:如函数调用运算符()
运算符与运算量的关系
i目运算符:要求i个运算量参加运算。
运算量的类型:%要求两个运算量均为整型。
运算的优先级:
运算的结合方向:
运算结果的类型:即表达式值的类型。
详见附录3。
赋值表达式可出现在算术表达式中:
3+(a=5)*6
1. 算术运算
1) 整数相除舍去小数部分,如:
5/3=1
但有一个数为负数时,舍入方向视不同的系统而定。
-5/3=-2 (少数系统)
-5/3=-1 (多数系统)
2) 若有一个数为实数,则结果为double型(因所有实数都按double型进行运算)。
注意:模运算符“%”要求其两侧均为整型数据。
3)自反算术赋值运算符(复合的赋值运算符)
赋值运算符前加上其它的运算符构成。
使用复合运算符的目的:简化程序和提高编译效率
-=:自反减赋值
+=:自反加赋值
*=:自反乘赋值
/=:自反除赋值
%=:自反模赋值
c=b*=a+2
a+=3 a=a+3
x*=y+8 x=x*(y+8)
x%=3 x=x%3
等价
4)自加/自减运算
i++:先使用,后自加。
i--:先使用,后自减。
++i:先自加,后使用。
--i:先自减,后使用。
结合方向:自右至左。
运算对象:整型变量。
何时进行自加自减,举例说明如下(若i=3):
— K=i++;执行后K=3,i=4。
— K= (i++)+( i++)+( i++);执行后K=9,i=6。
过程为:(1)取出i的原值3相加,得K=9;
(2)i进行三次自加,得i=6。
— K= (++i)+( ++i)+( ++i);执行后K=18,i=6。
自加是在整个表达式求解一开始时最先进行的,故先对i进行三次自加得i=6,然后再进行K=6+6+6的运算。
C编译处理时,尽可能多的自左而右将若干个字符组成一个运算符,如:i+++j相当于(i++)+j。
上机实验:printf(“%d,%d”,i,i++);
视不同的系统分别输出答案(3,3)或(4,3)。
5)正/负号运算符
优先级:高于*、/ 运算符。
结合方向:自右至左。
赋值运算符的结合方向均为自右至左。
6)编程注意事项
可靠性第一,效率第二。
分解费解的语句;
适当增加一些括号;
加注释说明
分解表达式,提高程序的可移植性。