《第3章运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《第3章运算符和表达式.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章 运算符和表达式 本章主要内容3.1 3.1 基本运算符基本运算符3.2 3.2 表表 达达 式式3.3 3.3 运算符优先级和结合性运算符优先级和结合性3.4 3.4 类类 型型 转转 换换3.1 基本运算符3.1.1 3.1.1 算术运算符算术运算符3.1.2 3.1.2 关系运算符关系运算符3.1.3 3.1.3 逻辑运算符逻辑运算符3.1.4 3.1.4 位运算符位运算符3.1.5 3.1.5 赋值运算符赋值运算符3.1.6 3.1.6 逗号运算符逗号运算符3.1.7 3.1.7 三目运算符三目运算符3.1.8 3.1.8 自增、自减运算符自增、自减运算符3.1.9 3.1.9
2、sizeofsizeof运算符运算符3.1.1 算术运算符C+中含有以下单目算术运算符:-负数运算符 +正数运算符C+中含有以下双目算术运算符:+加法运算符 减法运算符 *乘法运算符 /除法运算符%求模运算符3.1.2 关系运算符 关系运算符完成两个操作数的比较运算。C+中提供了6个关系运算符:(小于)、(大于)、=(大于等于)、=(等于)、!=(不等于)。当关系成立时,其运算结果为整数1(逻辑真);当关系不成立时,其运算结果为整数0(逻辑假)。关系运算的结果可作为一个整数参与表达式的运算。由于实数在计算机内进行运算和存储时,都会产生误差,在进行两个实数的比较时,不能采用精确的比较(直接比较两
3、数的大小)。3.1.3 逻辑运算符 逻辑运算符把各个运算的变量(或常量)连接起来组成一个逻辑表达式,包括:逻辑非(!)逻辑与(&)逻辑或(|)。逻辑非是单目运算符,只要求有一个运算量。逻辑运算符的运算优先级为:!高于&高于|。!的优先级高于算术运算符,&和|的优先级比关系运算符低。例3-1 逻辑运算符使用示例3.1.4 位运算符 C+中提供了按位逻辑运算符按位与(&)按位或(|)按位异或()移位运算符()取反运算符()1.按位异或逻辑运算符 按位异或“”也称XOR运算符,其运算规则是:将两个操作数逐位进行运算,若对应位不同,则该位结果为1,否则为0。3.1.4 位运算符2.移位运算符 1)左移
4、运算符:operationm(m为整数)当左移时,对于带符号数,最高位表示符号,可能会因为低位的1或0移到最高位,最终改变操作数的符号。当右移时,操作数右移m个二进制位后,左边移出的空位用符号位补齐,最高位始终补和原来的最高位相同的数。位运算符的运算优先级为(括弧):高于()高于&高于高于|。3.1.5 赋值运算符 C+语言提供了两类赋值运算符:基本赋值运算符 复合赋值运算符。基本赋值运算符为“=”复合赋值运算符有 +=、-=、*=、/=、%=、=、&=、=、|=。赋值运算符作用是将一个数值或一个表达式的值赋给一个变量。3.1.5 赋值运算符 (1)赋值运算符都是二元运算符,赋值操作具有右结合
5、性。即当表达式中有多个赋值运算符时,其是从右向左结合的。(2)赋值运算符左边的操作数必须是非const的左值。(3)多次连续赋值操作。赋值表达式的返回值是赋值后左边变量的值。可以将一个赋值表达式作为另一个赋值表达式的右操作数,实现连续的赋值。(4)赋值运算符的优先级是同级的。3.1.6 逗号运算符 在C+中,逗号“,”既是运算符,又是分隔符。逗号运算符用来将两个表达式连接起来,逗号表达式的一般表达形式为:,逗号运算符是双目运算符,取其右操作数的值作为运算结果。逗号运算符的优先级最低。例3-2 逗号运算符的使用示例 3.1.7 三目运算符 在C+中,三目运算符的一般形式为:?:;关于三目运算符的
6、几点说明。(1)表达式1是关系表达式或逻辑表达式,表达式2和表达式3可以是常量、变量或表达式。(2)条件运算符的结合方向为“自右至左”。(3)表达式1、表达式2、表达式3的类型可以不同。此时条件表达式值的类型为它们中较高的类型。例3-3 三目运算符的使用示例3.1.8 自增、自减运算符 自增运算符“+”、自减运算符“-”。这两种运算符都是一元运算符,有前置和后置两种形式:(1)前置运算:先自加(减)后引用,例如:+i或I;/表示在使用i之前先使i加1或减1 (2)后置运算:先引用后自加(减),例如:i+或i-;/表示使用i之后再使i加1或减1 自增运算符和自减运算符只能用于变量,结合方向都是自
7、右向左的。例3-4 自增、自减运算符的使用示例3.1.9 sizeof运算符 C+中,每种类型的变量都占用一定大小的存储单元,该存储单元的大小和变量的类型以及程序运行所在的机器有关。sizeof运算符用于测试某种数据类型或表达式的类型在内存中所占的字节数,它是一元运算符。其语法格式为:sizeof()或 sizeof()例3-5 sizeof运算符的使用示例3.2 表 达 式 表达式一般是由运算符、圆括号和操作数构成。操作数可以是常量、变量或函数等。使用不同的运算符可以构成不同类型的表达式,如 算术表达式 赋值表达式 关系表达式 逻辑表达式等。表达式的书写:操作数、运算符、圆括号之间可以加空格
8、,使得表达式更易读。3.2 表 达 式1.左值表达式和右值表达式 在C+中,左值就是在赋值中放在赋值运算符左边的值,可以是一个引用到对象的表达式,通过左值我们可以取出该对象的值。右值就是在赋值中放在赋值运算符右边的值。与左值不同的是右值只能出现在赋值的右边,不能出现在赋值语句的左边。2.算术表达式 由算术运算符、位运算符和操作数组成的符合语法规则的序列称为算术表达式,算术表达式的值为整型或实型。3.2 表 达 式3.赋值表达式 赋值运算符“=”的作用是将一个数赋给一个变量,当然也可以将一个表达式赋给一个变量,赋值表达式要求赋值运算符左边必须是左值,其功能是用右值表达式的值修改左值。赋值表达式一
9、般形式为:;对赋值表达式说明以下几点。(1)赋值表达式的值是其左操作数的值,其结果的类型为左操作数的类型。(2)赋值操作具有低优先级。赋值运算符的优先级是低于除逗号运算符以外的任何操作符。(3)赋值表达式的值类型为左值类型。3.2 表 达 式4.关系表达式 关系表达式是用关系运算符连接两个数值表达式形成的式子。一般形式为:;关系表达式的求值结果只有逻辑值0或1。关系运算符“=”用来判定两个操作数是否相等。5.逻辑表达式 逻辑表达式类似于关系表达式,是用逻辑运算符连接起来的表达式。其一般形式为:;当逻辑关系成立时,其运算结果为真;反之,为假。3.2 表 达 式6.逗号表达式 由逗号运算符和操作数
10、组成的符合语法规则的序列。其一般的形式为:,.,逗号表达式按从左到右的顺序依次求出各表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。7.表达式语句 任何一个表达式后加上分号“;”就构成了表达式语句。其一般格式为:;8.空语句 空语句仅由一个分号组成,用来作空循环体。3.3 运算符优先级和结合性 优先级是指在同一个表达式中,多个运算符出现时,运算符处理的顺序,而不管它们在表达式中位置上的前后关系。结合性是指相邻的几个优先级相同的运算符的运算顺序,结合性也称为结合方向,有从左到右和从右到左两种:左结合性:运算对象先与左面的运算符结合,也就是从左到右运算;右结合性:运算对象先与右面的运算符
11、结合,也就是从右到左运算。在对表达式求值时,如果在一个运算对象两侧的运算符优先级相同,则按规定的运算符结合性处理。3.4 类 型 转 换3.4.1 3.4.1 自动类型转换自动类型转换3.4.2 3.4.2 强制类型转换强制类型转换3.4.3 3.4.3 赋值转换赋值转换3.4.4 3.4.4 逻辑表达式求值的优化逻辑表达式求值的优化3.4.1 自动类型转换 在C+中,如果编译器看见一个表达式或者函数使用了不合适的类型,通常会进行自动的类型转换,即自动将表达式中的操作数转换成所需类型的值。一个表达式中不同数据类型的数据进行混合运算时,C+语言将两个不同类型的操作数自动转换成同一类型的操作数,然
12、后再进行运算。各种基本数据类型之间的自动类型转换规则如图3.1所示。3.4.1 自动类型转换 转换规则是将低精度类型的数据转换为高精度类型的数据,因此在数据转换过程中,数据的精度不会损失。在处理表达式的过程中,并不是将低优先级的变量直接转换成高优先级的变量,而是在表达式处理的过程中,按照需要进行变换。3.4.2 强制类型转换 强制类型转换(也称显示类型转换)是由程序员在程序中用类型转换运算符明确指明的转换操作。强制类型转换的一般形式为:()或者 ()()3.4.3 赋值转换 赋值表达式中,当赋值运算符左值表达式的类型与右值表达式的类型不同,且数据类型兼容时,将进行类型转换,C+语言先计算出右值表达式的值,然后将其转换为左值的类型后赋给左值。转换的准则为:(1)将精度低的变量赋值给精度高的变量时,数值保持不变。(2)将精度高的变量赋值给精度低的变量时,可能出现部分数值丢失。3.4.4 逻辑表达式求值的优化 逻辑表达式求值的优化:在逻辑表达式求值时,一旦能确定其值,则不必再逐步求值。