《教学课件第03章运算符和表达式》由会员分享,可在线阅读,更多相关《教学课件第03章运算符和表达式(38页珍藏版)》请在金锄头文库上搜索。
1、第第 3 章章 运算符与表达式运算符与表达式3.1 基本运算符和表达式基本运算符和表达式3.2 类型转换类型转换3.1 基本运算符和表达式基本运算符和表达式3.1.1 C+运算符及表达式简介运算符及表达式简介完成对常量、变量作运算的符号称为完成对常量、变量作运算的符号称为运算符运算符。把参与运算的对象称为把参与运算的对象称为操作数操作数。操作数可以是常量和变量等。操作数可以是常量和变量等。各种运算符见表各种运算符见表 2-4一元运算符、二元运算符、三元运算符一元运算符、二元运算符、三元运算符3.1.2 算术运算符和算术表达式算术运算符和算术表达式基本算术运算符基本算术运算符: + - * /
2、% / 整数运算时为整除,结果为整数。整数运算时为整除,结果为整数。 % (模运算或称模运算或称求余求余运算运算) 必须为整型数据。必须为整型数据。 例例: 7/3 结果?结果? 7.0/3 结果?结果? 7%3 结果?结果?22.3333331由运算符和操作数构成由运算符和操作数构成表达式表达式:如:如:a + b a * ( c + d ) a * c + d3.1.3 运算优先级和结合性运算优先级和结合性优先级优先级: 对于同一表达式中出现多个运算符,先算对于同一表达式中出现多个运算符,先算 哪一个。哪一个。结合性结合性: 在两种运算优先级相同时,在两种运算优先级相同时,“自左向右自左向
3、右”还是还是“自右向左自右向左”运算称为结合性。运算称为结合性。 如:如:算术运算符的算术运算符的优先级优先级与与结合性结合性优先级优先级: + - 较低较低* / % 较高较高结合性结合性: 自左向右自左向右例:表达式:例:表达式:6/3*2 “自左向右自左向右” 或或 “自右向左自右向左” 运算结果不运算结果不同同3.1.4 关系运算符和关系表达式关系运算符和关系表达式“关系运算关系运算”实际上就是实际上就是“比较运算比较运算”关系运算符及其优先次序关系运算符及其优先次序=!=小于小于小于等于小于等于大于大于大于等于大于等于恒等于恒等于不等于不等于优先级相优先级相同同(较高较高)优先级相优
4、先级相同同(较低较低)关系运算符及其关系运算符及其优先级优先级说明说明a=bc 等效于等效于 a=(ba+b 等效于等效于 c(a+b) 算术算术关系(关系( , 和和 = )关系(关系( = 和和 != ) 高高 低低关系表达式关系表达式1. 用关系运算符连接两个表达式用关系运算符连接两个表达式如:如:ab, a+bb+c, ab 的值为的值为 0则表达式则表达式 bb)&(xy)ab&xy(a=b) | (x=y)a=b | x=y(!a)b!a b(2)C+ 编译系统在给出编译系统在给出逻辑运算结果逻辑运算结果时,时, 以以数值数值 1 代表代表 “真真” 以以数值数值 0 代表代表 “
5、假假”(1)运算时,在)运算时,在判断一个量判断一个量是否为是否为“真真”时,时, 以以非非0 代表代表 “真真” 以以0 代表代表 “假假”例如:例如:已知已知 a=4则则 !a 的值是的值是 0 已知已知 a=0, b=5 则则 a&b 的值是的值是 0则则 a|b 的值是的值是 1则则 !a&b 的值是的值是 1注意:注意:注意:注意:在在C+程序中,程序中,欲表示数学关系欲表示数学关系 0x10 ,C+的逻辑表达式必须写成的逻辑表达式必须写成 0=x & x=10,而不能写成而不能写成 0= x =10。 为什么?为什么? 3.1.6 位运算符和位运算表达式位运算符和位运算表达式 位运
6、算是对整型数据的运算位运算是对整型数据的运算(可以操作到位可以操作到位),符号位参与运算,符号位参与运算,主要用于系统程序设计。主要用于系统程序设计。位运算符共有位运算符共有6 种种:它们是:按位它们是:按位与与(&) 按位按位或或(|) 按位按位异或异或() 按位按位取反取反() 左移左移() 举例:按位举例:按位“与与”例如:已知:例如:已知:char a=3, b=2 , c ; 求:求: c = a & b ; 此时,可将此时,可将a、b、c看成是看成是一个字节长度的整型数。一个字节长度的整型数。 a 0000 0011 & b 1111 1110 c 0000 0010结果变量结果变
7、量 c 的值为的值为 2。其它位运算,自学。其它位运算,自学。 3.1.7 自增、自减运算符和表达式自增、自减运算符和表达式使变量的值加使变量的值加 1 或减或减 1 的运算的运算如如: +i, - -i在使用在使用 i 之前加或减之前加或减 1i+, i- -在使用在使用 i 之后加或减之后加或减 1int i=3, j;j=+i;运算后运算后 i = ?,j = ?int i=3, j;j=i+;运算后运算后 i = ?,j = ?注意注意:只能用于变量,不能用于常量和表达式,只能用于变量,不能用于常量和表达式, 如:如: 3+; (a+b)+; 错误错误i = 4,j = 4i = 4,
8、j = 33.1.8 赋值运算符和赋值表达式赋值运算符和赋值表达式1赋值运算符赋值运算符 “ “=” ” 是赋值运算符,是赋值运算符,赋值表达式格式:赋值表达式格式: 求解过程:求解过程:求出求出 的值,赋给的值,赋给 赋值表达式的值:赋值表达式的值:为为 的值的值如:如:a = b + c 还可以是另一个赋值表达式,还可以是另一个赋值表达式,如如: a=b=5 a=5+(c=6) a=(b=4)+(c=6)如果如果 a 初值为初值为 2,表达式结果?,表达式结果? 结果为结果为 7如如: a=33是最简单的表达式是最简单的表达式i=i+1它不同于它不同于“等于号等于号”注意优先级注意优先级
9、与结合性与结合性 b = c = d = a+5自右向左自右向左表达式结果分别为:?表达式结果分别为:? 5 11 102. 复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符x*=y+8等价于等价于 x=x*(y+8)x%=3等价于等价于 x=x%3x/=9简写为:简写为: a += 3 a=a+3简写为:简写为: a - = b a=a-b同理:同理:赋值运算符赋值运算符 以及以及 复合赋值运算符复合赋值运算符的运算优先级比的运算优先级比算术运算符算术运算符优先级低,优先级低,运算结合性为运算结合性为自右向左。自右向左。等价于等价于 x=x/9例例: a+=a-=a*a如果如果 a
10、初值为初值为 2,表达式结果?,表达式结果? a+=a-=a*a结果结果 a 的值为的值为 - 4表达式的结果也为表达式的结果也为 - 43.1.9 逗号运算符和逗号表达式逗号运算符和逗号表达式逗号运算符逗号运算符:, 逗号表达式逗号表达式: ,. ,如如: a=3*5 , a*4 , a+5逗号运算符逗号运算符优先级最低优先级最低,结合性:自左向右结合性:自左向右求解过程:求解过程:依次计算依次计算 、 . 的值。的值。逗号表达式的值:逗号表达式的值:为为 的值的值运算结束后:运算结束后:a 的值为的值为 15 整个表达式的值为整个表达式的值为 20a=3*5, a*4x=(a=3, 6*3
11、)赋值表达式赋值表达式x=a=3, 6*3逗号表达式逗号表达式例:例:如下表达式,如下表达式, 运算结束后运算结束后 a=? x=? 表达式表达式=?a=15, 表达式表达式=60a=3, x=18, 表达式表达式=18a=3, x=3, 表达式表达式=18逗号表达式逗号表达式3.1.10 sizeof( ) 运算符运算符和表达式和表达式 例例 int i ; double x; sizeof(int) sizeof(i) sizeof(double) sizeof(x)格式:格式: sizeof (类型标识类型标识/变量名变量名) 功能:功能: 求某类型变量所占字节数求某类型变量所占字节数结
12、果均为结果均为 4结果均为结果均为 8例:例: 求求 & 3.1.11 逻辑表达式运算优化时的副作用逻辑表达式运算优化时的副作用从左向右扫描,计算从左向右扫描,计算,当当 为为真真时,继续计算时,继续计算 当当 为为假假时,即能确定整个表达式时,即能确定整个表达式的值为假,则停止计算的值为假,则停止计算例:例:求求 | | 从左向右扫描,计算从左向右扫描,计算,当当 为为假假时,继续计算时,继续计算 当当 为为真真时,即能确定整个表达式时,即能确定整个表达式的值为真,则停止计算的值为真,则停止计算课堂练习课堂练习int x , y , z , w ; 输出结果?输出结果?x = y = z =
13、 1 ;w = +x | +y & +z ;cout x t y t z n ;cout w n ;输出:输出: 2 1 1 13.2 类型转换类型转换3.2.1 赋值时的自动类型转换赋值时的自动类型转换 如果赋值运算符两侧的类型不一致,则遵循以下如果赋值运算符两侧的类型不一致,则遵循以下几条原则进行类型转换后赋值。几条原则进行类型转换后赋值。1. 整型变量整型变量实型数据实型数据, 舍弃小数舍弃小数(无四舍五入无四舍五入)。int i=3.96 ; i 为为 32. 实型变量实型变量整型数据整型数据, 数值不变数值不变, 有效数位增加。有效数位增加。float f=23 ; f 为为 23.
14、0 double d=23 ; d 为为 23.03整型数据之间相互赋值整型数据之间相互赋值 整型数据类型有:整型数据类型有:signed char unsigned charsigned short unsigned shortsigned int unsigned intsigned long unsigned long各种类型的整型数占用的字节数是不同的,其二进各种类型的整型数占用的字节数是不同的,其二进制位数有长有短。它们之间相互赋值,其实就是它制位数有长有短。它们之间相互赋值,其实就是它们内存数据之间的赋值,分两种情况。们内存数据之间的赋值,分两种情况。下面以下面以 int 型数据与
15、型数据与 char 型数据之间的赋值进行说明:型数据之间的赋值进行说明: 将将 int 型变量赋给字符型变量时型变量赋给字符型变量时 (长长短短) 方法:方法:截取低位赋值截取低位赋值例:例:signed char c1=250 ; c1真值为真值为 -6 250 为为int型常数型常数, 32 位:位:00000000 1111 1010 c1: 1111 1010 将字符型变量赋给将字符型变量赋给 int 型变量时型变量时(短短长长),又分成两种情况:又分成两种情况: 有符号的字符型数据有符号的字符型数据整型变量整型变量 需符号位扩展需符号位扩展 例:例:char c1=15 ; int
16、i ; i=c1 ; i 为整型变量为整型变量 32 位:位: 00000000 0000 1111 c1(正号正号): 0000 1111扩展扩展正号,结果正号,结果i 的的真值为真值为 15 15 为整型常数为整型常数 32 位:位: 00000000 0000 1111 char c1=250 ; int i ; i=c1 ; i 为整型变量为整型变量 32 位:位: 11111111 1111 1010 250 为整型常数为整型常数 32 位:位: 00000000 1111 1010 c1(负号负号): 1111 1010 扩展扩展负号,结果负号,结果 i 的的真值为真值为 - 6无
17、符号的字符型数据无符号的字符型数据整型变量整型变量 前面补前面补 0 unsigned char c1=250 ; int i ; i=c1 ; i 为整型变量为整型变量 32 位:位: 00000000 1111 1010 前面前面补补0,结果,结果 i 的的真值为真值为 250250 为整型常数为整型常数 32 位:位: 00000000 1111 1010 c1(无符号数无符号数): 1111 1010 3.2.2 各种类型运算量混合运算时的自动类型转换各种类型运算量混合运算时的自动类型转换 C 语言的数值型数据语言的数值型数据(常量变量常量变量)包括包括:整型整型int, short
18、int, long int, unsigned int, unsigned short, unsigned long实型实型float, double字符型字符型char, unsigned char各种数据类型,它们的常量和变量之间可以混合各种数据类型,它们的常量和变量之间可以混合运算。两个量运算时,在计算机内部首先将它们运算。两个量运算时,在计算机内部首先将它们转换成相同数据类型的量,然后进行运算。虽然转换成相同数据类型的量,然后进行运算。虽然这种转换是这种转换是C+内部自动完成的,但是若编程者内部自动完成的,但是若编程者知道了转换机理,对掌握及灵活运用知道了转换机理,对掌握及灵活运用C+
19、表达式表达式是有帮助的。转换原则如图是有帮助的。转换原则如图2-3所示:所示: int i; float f; double d; 10 + a + i * f - d / iintdoubledoubledoubledouble低类型低类型 高类型高类型低类型:低类型:存储字节少存储字节少 所表示的数据范围小。所表示的数据范围小。高类型:高类型:存储字节多存储字节多 所表示的数据范围大。所表示的数据范围大。double floatlongunsignedint char, short转换原则转换原则例:例: 3.2.3 强制类型转换强制类型转换形式形式: 类型名类型名 (表达式表达式) 或或
20、: (类型名类型名)表达式表达式例例: int i, a ; float x, y ; double z ; a = (int) (x+y) ; 或或 a = int(x+y) ; z = (double) a ; 或或 z = double(a) ; a = (int) z%i ; 或或 a = int(z) % i ;表达式的运算结果为表达式的运算结果为 double 型,型,但但 :a 仍然为仍然为 int 型变量。型变量。注意注意:1. 强制转换的对象:表达式。强制转换的对象:表达式。 2. 强制转换并不将变量本身类型转变。强制转换并不将变量本身类型转变。小结:小结:类型转换有两种:类型转换有两种:(1)自动转换(赋值时,混合运算时)自动转换(赋值时,混合运算时)(2)强制转换)强制转换课堂练习:课堂练习:求下面算术表达式的值:求下面算术表达式的值:(1)已知)已知 x=3.2, a=7, y=4.7 求求 x + a % 3 * (int)(x+y) % 2 / 4 的的值值(2)已知)已知 a=2, b=3, x=3.5, y=3.2 求求 float(a+b)/2 + int(x) % int(y) 的的值值3.23.5第第 3 章章 结束结束