收藏 分享(赏)

第3章运算符与表达式.ppt

上传人:hwpkd79526 文档编号:7414499 上传时间:2019-05-16 格式:PPT 页数:32 大小:189KB
下载 相关 举报
第3章运算符与表达式.ppt_第1页
第1页 / 共32页
第3章运算符与表达式.ppt_第2页
第2页 / 共32页
第3章运算符与表达式.ppt_第3页
第3页 / 共32页
第3章运算符与表达式.ppt_第4页
第4页 / 共32页
第3章运算符与表达式.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、第三章 运算符和表达式,3.1 c语言运算符和表达式简介 3.2 赋值运算符和赋值表达式 3.3 算术运算符和算术表达式 3.4 关系运算符和关系表达式 3.5 逻辑运算符和逻辑表达式 3.6 逗号运算符和逗号表达式 3.7 条件运算符和条件表达式 3.8 位运算符和位运算表达式 3.9 sizeof运算符 3.10 运算符的优先级和结合性,3.1 c语言运算符和表达式简介,运算符是告诉编译程序执行特定操作的符号。根据运算符所操作的操作数的数目,可把运算符分为单目运算符、双目运算符和三目运算符,另外还可以根据运算符的作用进行分类,运算符按作用分类如表3-1所示:,表3-1 c语言运算符,在使用

2、运算符的时候要注意以下几点: 掌握运算符的功能。 理解运算符和操作数之间的关系。这里分为两个方面:一方面是操作数的个数,另一方面是操作数的类型。 区分运算符的优先级别。 掌握结合性。 注意运算结果的类型,尤其要注意当操作数的类型不同时结果值的类型。,表达式的定义: 常量、变量和函数是一个表达式。 运算符与上述各项的组合是一个表达式。 运算符与表达式的组合是一个表达式。表达式可以看作是一种复合数据,它也具有数据的一般属性:值和类型。它们等于计算表达式结果的值类型。,3.2 赋值运算符和赋值表达式,C语言的赋值运算符用“=”表示,由赋值运算符组成的表达式称为赋值表达式,它的一般形式如下:变量 =

3、表达式它的作用是把右侧表达式的值赋给左侧变量。,在使用赋值表达式的时候应注意以下几点: 赋值表达式是右结合性运算符,其运算次序应从右至左,例如a=b=3,相当于a=(b=3),即先进行b=3的赋值运算,此时产生的新的表达式根据赋值运算的定义,可以赋给另一个变量,因此再进行a=b的赋值运算,最终a和b的值都为3,且都为整型。这也非常适用于变量的初始化。 赋值表达式不是赋值语句,但根据c语言的规定,任何表达式的末尾加上分号后就构成语句,因此 a=b=3; 是一个语句。 “=”跟数学上的表达不同,赋值符号没有等于的含义,在c语言中“=”表示等于。,3.3 算术运算符和算术表达式,表3-4 算术运算符

4、,由算术运算符和括号将操作数连接起来的式子称为算术表达式。操作数可以包括常量、变量、函数等。,高 ()+、- *、/、%+、-低,图3-1 算术运算符的优先级,自增(+)和自减(-)运算是c语言的一个特色。它们是单目运算符,具有右结合性。对于赋值表达式i=i+1可以写成i+或者+i,习惯上称为“后加加、先加加”。 对于赋值表达式i=i-1可以写成i-或者-i,习惯上称为“后减减、先减减”。i+和+i本身都是一个表达式,其作用都相当于i=i+1,但两者在执行次序上是有差别的,“+”放在变量前面,那么在运算之前,变量先完成自增运算;如果“+”放在变量后面,那么自增运算是在变量参加表达式的运算后再运

5、算。,C语言中,整型、实型、字符型的数据之间可以混合运算,在进行运算时,不同类型的数据要先转换成同一类型的数据然后再进行计算。自动转换发生在不同数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则。 (1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 (2) 转换按数据长度增加的方向进行,以保证精度不降低。如 int 型和 long 型运算时,先把 int 型转成 long 型后再进行运算。 (3) 所有的浮点运算都是以双精度进行的,即使仅含 float 型单精度量运算的表达式,也要先转换成 double 型,再作运算。 (4) char 型和 short 型参与运

6、算时,必须先转换成 int 型。,3.4 关系运算符和关系表达式,关系运算符用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。它们都是双目运算符,具有左结合性.由关系运算符和其他表达式连接起来的式子称为关系表达式。关系运算是对两个运算量进行比较的一种运算,比较的结果分为“真”、“假”两种。如果式子成立则结果为“真”,在c语言中用“1”表示;如果式子不成立则结果为“假”,在c语言中用“0”表示。因此,关系表达式的类型为整型。,3.5 逻辑运算符和逻辑表达式,表3-5 逻辑运算符,逻辑表达式的结果是一个逻辑量,“真”用“1”来表示,“假”用“0”来表示。但是在判断一个量是

7、否为“真”时,以0代表“假”,以非0代表“真”。运算结果值如表3-6,,表3-6 逻辑运算真值表,运算规则如下: (1) “逻辑非”运算是当运算量为非0值时,运算结果是0;当运算量为0时,运算结果是1。 (2) “逻辑与”运算是当且仅当两个运算量都是非0值,运算结果1;否则运算结果为0。 (3) “逻辑或”运算是两个运算量中只要有一个是非0值,运算结果就为1;只有当两个运算量都是0时,运算结果为0。,在进行逻辑运算时,需要注意以下几点:(1)逻辑表达式的结果只有0或1,因此逻辑表达式的类型为整型。(2)C语言是用“非0”和“0”来判断一个运算量是真或是假,因此,逻辑运算的对象可以是任何类型的数

8、据。 (3)“逻辑与”和“逻辑或”具有左结合性,即由左向右计算各运算量的值,有时候在运算的中途就可直接确定表达式的值而不必再继续计算下去。 (4)逻辑运算经常跟关系运算结合在一起形成比较复杂的表达式,要注意逻辑非运算的优先级高于算术运算符,而逻辑与、逻辑或的优先级都低于关系运算符,但都高于赋值运算符。,3.6 逗号运算符和逗号表达式,在c语言中,逗号“,”也可以作为运算符使用,称为逗号运算符,也称为“顺序求值运算符”。通过逗号运算符可以将多个表达式连接起来,构成逗号表达式。逗号表达式的一般形式为: 表达式1,表达式2,表达式3,表达式n其作用是依次求n个表达式的值,并以表达式n的值作为整个逗号

9、表达式的值。,在使用逗号表达式时应注意以下几点: (1) 并不是所有出现的逗号都是逗号运算符,例如在说明变量或者函数参数表时里面的逗号只是用作各变量之间的间隔符。例如,int a=2,b,c和printf(“%d,%d,%d“,a,b,c)这两处的逗号并不是逗号运算符。 (2) 逗号运算符是所有运算符中优先级最低的,因此为了避免歧义通常都加上“( )”。例如表达式a=(3*4,4+3)和a=3*4,4+3是不同的,因为“=”的优先级比“,”高,所以a=3*4,4+3进行的是a=3*4的赋值运算,结果a的值为12,而a=(3*4,4+3)运算结果a的值为7。 (3) 在依次求表达式值的时候要注意

10、表达式中的变量值具有传递效果。例如,设b的初值为2,则a=(b=b+2,b*3)表达式在计算的时候首先计算b=b+2赋值运算得到b的值为4,然后在计算表达式b*3的时候b的值应采用的是前一步b的赋值运算结果,即4,也就是说b*3的结果为12,即a的值为12。 (4) 在逗号表达式中,如果最后一个表达式跟前面的表达式没有依赖关系,则可直接计算最后一个表达式的值作为整个表达式的结果。例如,x=(m+4,n*4,m+n,3+4),可直接得到该表达式的值为3+4,即7,不必计算前面的表达式m+4,n*4,m+n的值。 (5) 在多数情况下,使用逗号表达式不是为了取得和使用这个逗号表达式的最终结果值,其

11、目的是为了分别按顺序求得每个表达式的结果值。这在循环结构中经常使用。,3.7 条件运算符和条件表达式,条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真假检测,然后根据结果返回两外两个表达式中的一个。条件表达式的一般形式为:表达式1 ? 表达式2 :表达式3在运算中,首先对第一个表达式进行检验,如果为真,则计算表达式2的值,并把这个值作为整个表达式的值;如果为假,则计算表达式3的值,并把这个值作为整个表达式的值。也就是说,根据条件的真假,只能选择一个表达式的结果作为整个表达式的结果。,使用条件运算符应注意以下几点: 条件表达式中,三个运算对象的类型可以不相同。例如:x?a

12、:0.5 条件运算符遵循“自右向左”方向的结合原则, 例如:xy?x:zw?z:w 等同于xy?x:(zw?z:w) 条件运算符优先级高于赋值运算符,低于逻辑运算符和关系运算符,3.8 位运算符和位运算表达式,所谓位运算是指进行二进制位的运算,其运算对象不是以一个数据为单位,而是对内存中存储数据的每个二进制位进行运算,每个二进制位只能存放0或1,因此位运算实际上是针对0和1的运算。在TC2.0中,位运算包括逻辑位运算和移位位运算,具体说明如表3-7,,表3-7 位运算符,1 逻辑位运算 逻辑位运算的运算规则如下: (1) 位逻辑与运算是对两个运算数据的对应二进制位进行与运算。当且仅当对应的两个

13、位都是1时结果为1,否则为0。 (2) 位逻辑或运算是对两个运算数据的对应二进制位进行或运算。只要对应的两个位中有一个是1,结果就为1;只有当对应的两个位都是0时结果为0。 (3) 位逻辑异或运算是对两个运算数据的对应二进制位进行异或运算。若对应的两个位的值不同则结果为1;若对应的两个位的值相同则结果为0。 (4) 位逻辑非运算是把运算数据按二进制位按位取反。若操作数的某位二进制位是0则结果为1;若操作数的某位二进制位是1则结果为0。,表3-8 逻辑位运算真值表,在使用位运算符的时候应注意以下几点: (1) 位运算符中除位逻辑非()为单目运算符以外,均为双目运算符。 (2) 位运算符的操作数只

14、能是整型或字符型的数据。 (3) 对于位逻辑与运算,根据运算法则可进一步得到,一个数的某二进制位与0相与该位结果为0,可以利用这点将数据中的某些位置零。例如,如果想将一个数a的某些位置0,只需找一个数b,其相应位为0,然后与a进行位逻辑与运算即可。类似的,一个数的某二进制位与1相与该位结果保持原值,可以利用这点保留一个数中某些指定位。例如,如果想将一个数a的某些位保留下来,只需找一个数b,其相应位为1,然后与a进行位逻辑与运算即可。 (4) 对于位逻辑或运算,根据运算法则可进一步得到,一个数的某二进制位与0相或该位结果保持原值,一个数的某二进制位与1相或该位结果为1,可以利用这点将一个数的某些

15、特定位置1。例如,如果想将一个数a的某些位置1,只需找一个数b,其相应位为1,其余位为0,然后与a进行位逻辑或运算即可。 (5) 对于位逻辑异或运算,根据运算法则可进一步得到,一个数的某二进制位与0相异或该位结果保持原值,一个数的某二进制位与1相异或可使0变1,1变0。可以利用第二点将一个数的特定位翻转。例如,如果想将一个数a的某些位翻转,只需找一个数b,其相应位为1,然后与a进行位逻辑异或运算即可。,2 移位位运算 移位位运算的运算规则如下: 位左移运算是将运算数据中的每个二进制位向左移动若干位,从左边移出去的高位部分被丢弃,右边空出的低位部分补0。位右移运算是将运算数据中的每个二进制位向右

16、移动若干位,从右边移出去的低位部分被丢弃。对于无符号数来说,左边空出的高位部分补0。对于有符号数来说,如果符号位为0(即正数),则空出的高位部分补0。如果符号位为1(即负数),则空出的高位部分补0还是补1,与所使用的计算机系统有关。Turbo C采用的补1的算法。,3.9 sizeof运算符,sizeof运算符是一个求字节数运算符。它是一个单目运算符,可以返回常量、变量或数据类型的字节长度。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。它的一般形式为:sizeof(数据类型 | 变量 | 常量),sizeo

17、f的运算规则如下: (1)若操作数具有类型char、unsigned char或signed char,其结果等于1。ANSI C正式规定字符类型为1字节。 (2)int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、 float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。 (3) 当操作数是指针时,sizeof依赖于编译器。 (4)当操作数具有数组类型时,其结果是数组的总字节数。 (5)联合类型操作

18、数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数。 (6) 如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。,3.10 运算符的优先级和结合性,C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。 而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。c语言各运算符的优先级和结合性如表3-9所示:,关于表3-9的说明如下: 优先级从上到下依次递减,最上面

19、具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左结合。具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。“( )”是与函数相关,“ ”与数组相关,而“”和“.”是取结构体成员。其次是单目运算符,所有的单目运算符具有相同的优先级,因此也可以说真正的运算符中它们具有最高的优先级。接下来是算术运算符,“*”、“/”、“%”的优先级是比“+”、“”高的。移位运算符紧随其后。 其次的关系运算符中,“”、“=”要比“=”、“!=”高一个级别。所有的逻辑运算符都具有不同的优先级,单目运算符“!”

20、和“”除外。逻辑位操作符的“与”比“或”高,而“异或”则在它们之间。跟在其后的“&”比“|”高。 接下来的是条件运算符,这是唯一一个三目运算符。 接下来是各种赋值运算符。 最后是逗号运算符。,小结,本章介绍了运算符和表达式,主要内容如下: 1 运算符和表达式的定义运算符是告诉编译程序执行特定操作的符号;表达式是由数据和运算符按照c语言的语法规则连接起来的式子。 2 运算符与表达式的应用运算符根据所操作的操作数的数目,可分为单目运算符、双目运算符和三目运算符,根据运算符的作用可分为算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符、强制类型转换运算符、成员运算符、下标运算符和括号运算符等。,3 运算符的优先级和结合性C语言中,运算符的运算优先级共分为15级,优先级较高的先于优先级较低的进行运算。如果在一个运算量两侧的运算符优先级相同,则按运算符的结合性所规定的结合方向处理,结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报