版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 运算符和表达式,第七章 运算符和表达式,7.1 运算符,算术运算符:、*、/、% 关系运算符:、=、|、& 赋值运算符:=及其扩展赋值运算符 条件运算符:?: 逗号运算符:, 指针运算符:*、& 求字节数运算符:sizeof 强制类型转换运算符:(类型) 分量运算符:.、 下标运算符: 自加、自减运算符:、 其它:如函数调用运算符(),第七章 运算符和表达式,7.2表达式,由运算符加上运算对象就构成了表达式,C语言允许使用以下类型的表达式: (1)赋值表达式,如:a=5 (2)算术表达式,如:34*2 (3)关系表达式,如:56 (4)逻辑表达式,如:35&a=b (5)条件表达式,如
2、:ab?a:b (6)逗号表达式,如:a=3,b=4,c=5,第七章 运算符和表达式,7.3 表达式的求值规则,C语言中的任何一个表达式都有一个确定的值,表达式的求值规则如下: (1)按运算符的优先级高低次序执行。 (2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按C语言规定的结合方向(结合性)进行。,第七章 运算符和表达式,优先级,是指在表达式中,运算符优先级较高的先于优先级较低的进行运算。 结合性,是指当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性,反之称为右结合性。 单目运算符、条件
3、运算符和赋值运算符是右结合性,其他运算符是左结合。,7.3 表达式的求值规则,第七章 运算符和表达式,算术表达式中,运算对象可以是常量,变量和函数等。 1基本算术运算符 基本算术运算符有如下5种: (加法)、(减法)、*(乘法)、/(除法)、%(求余数),7.4 算术表达式,第七章 运算符和表达式,说明: (1)除法运算“/”:C语言规定:两个整数相除,其商为整数,小数部分被舍弃。如果相除的两个数中至少有一个是实型的,则结果为实型。 (2)求余数运算“%”:求余数运算要求两侧的操作数均为整型数据,否则出错。在Turbo C中,结果的符号与被除数的符号相同。,7.4 算术表达式,第七章 运算符和
4、表达式,2算术表达式 所谓算术表达式,是指表达式中的运算符都是算术运算符。 在C语言中,整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用),如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换,后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。,7.4 算术表达式,第七章 运算符和表达式,7.4 算术表达式,说明: (1)横向向左的箭头,表示必须的转换。 (2)纵向向上的箭头,表示不同类型的转换方向。,第七章 运算符和表达式,注意: 箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转成unsigned型,再转成long型,
5、再转成double型。如果一个int型数据与一个double型数据运算,是直接将int型转成double型。,7.4 算术表达式,第七章 运算符和表达式,7.5 赋值表达式,1赋值运算符:= 作用是将一个表达式的值赋给一个变量。 2赋值表达式 由赋值运算符将一个变量和一个表达式连接起来就构成了赋值表达式,它的一般形式为: 变量 = 表达式 对赋值表达式求解的过程是:先求解赋值运算符右侧表达式的值,然后将值赋给左边的变量,赋值表达式的值就是被赋值的变量的值。,第七章 运算符和表达式,例如: x=5 /*将5赋值给变量x*/ y= (float)5/2 /*将表达式的值(=2.5)赋值给变量y*/
6、 注意:被赋值的变量,必须是单个变量,且必须在赋值运算符的左边;赋值表达式又允许出现在其它赋值表达式当中。,7.5 赋值表达式,第七章 运算符和表达式,当表达式值的类型与被赋值变量的类型不一致,但都是数值型或字符型时,系统会自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。具体规定如下: (1)实型赋予整型,舍去小数部分。 (2)整型赋予实型,数值不变,但将以浮点形式存放。 (3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。短整型赋给长整型时同理。,第七章 运算符和表达式,(4)整型赋予字符型,只把低八位赋予字
7、符量。长整型赋给短整型时同理。 (5)双精度实型数据转换成单精度实型数据时,只保留单精度的有效位数。 (6)除自动转换外,C语言也允许强制转换。数据类型强制转换的一般格式为 (要转换成的数据类型)(被转换的表达式) 其中,当被转换的表达式是一个简单表达式时,外面的一对原括号可以省略。,7.5 赋值表达式,第七章 运算符和表达式,例如: (double)a /*将变量a的值转换成double型,等价于(double)(a)*/ (int)(xy) /*将xy的结果转换成int型*/ (float)5/2 /*将5转换成实型,再除以2(=2.5),等价于(float)(5)/2*/ (float)
8、(5/2) /*将5整除2的结果转换成实型(2.0)*/,7.5 赋值表达式,第七章 运算符和表达式,3复合赋值运算 复合赋值运算符是在赋值运算符之前再加一个双目运算符构成的。复合赋值运算的一般格式为: 变量 双目运算符= 表达式 等价:变量=(变量 双目运算符 表达式)。当表达式为简单表达式时,表达式外的一对圆括号才可以省略,否则可能出错。,7.5 赋值表达式,第七章 运算符和表达式,例如: x=5 /*等价于x=x5*/ y*=x3 /*等价于y=y*(x3),而不是y=y*x3*/ C语言规定的10种复合赋值运算符如下: =,=,*=,/=,%= /*复合算术运算符(5个)*/ =,=,
9、|=,= /*复合位运算符(5个)*/,7.5 赋值表达式,第七章 运算符和表达式,例7.1求以下算术表达式的值。 (1)xa%3*(int)(xy)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(ab)/2(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 解:(1)2.500000 (2)3.500000,7.5 赋值表达式,第七章 运算符和表达式,例7.2求以下表达式的值,设a=12。 (1)a=a (2)a=2 (3)a*=23 (4)a/=aa (5)a%=(n%=2),n的值等于5 (6)a=a=a*=a 解:(1)24(2)10(3)60 (4
10、)0(5)0(6)0,7.5 赋值表达式,第七章 运算符和表达式,7.6 自加、自减表达式,1.运算符:(自加)、(自减) 自加运算使单个变量的值增1,自减运算使单个变量的值减1。 2.自加、自减表达式 根据变量与运算符的位置不同,自加、自减表达式有以下四种情况: 变量,变量(前置运算) 变量,变量(后置运算) (1)前置运算运算符放在变量之前,它先使变量的值增(或减)1,然后再以变化后的值参与运算,即先增减,后运算。 (2)后置运算运算符放在变量之后,它使变量先参与运算,然后再使变量的值增(或减)1,即先运算,后增减。,第七章 运算符和表达式,例7.3自增、自减运算符的用法与运算规则示例。
11、main() int x=6,y; printf(x=%dn,x); /*输出x的初值*/ y=x; /*前置运算:x先增1(=7),然后再赋值给y(=7)*/ printf(y=x:x=%d,y=%dn,x,y); y=x; printf(y=x:x=%d,y=%dn,x,y); 程序运行结果: x=6 y=x:x=7,y=7 y=x:x=6,y=7,7.6 自加、自减表达式,第七章 运算符和表达式,说明: (1)自增、自减运算常用于循环语句以及指针变量中。它使循环控制变量加(或减)1,或使指针指向下(或上)一个数据的地址。 (2)自增、自减运算符不能用于常量和表达式。例如,5、(ab)等都
12、是非法的。 (3)在表达式中,同一变量连续进行自增自减运算时,很容易出错,所以最好避免这种用法。 如,表达式d=(x)(x)(x)的值等于多少(假设x=3)?,7.6 自加、自减表达式,第七章 运算符和表达式,7.7 逗号表达式,逗号表达式的一般形式如下: 表达式1,表达式2,表达式n 其求解过程是自左至右,依次计算各表达式的值,最右边“表达式n”的值即为整个逗号表达式的值。 如:求解逗号表达式“a =3*5,a*4”的值: 先求解a =3*5,得a=15;再求解a*4=60,所以,逗号表达式的值为60。,第七章 运算符和表达式,注意:并不是任何地方出现的逗号,都是逗号运算符,很多情况下,逗号
13、仅用作分隔符。 如:printf(%d,%d,%d,a,b,c); “a,b,c”并不是一个逗号表达式,它是printf函数的三个参数,参数间用逗号间隔。 如果改写为: printf(%d,%d,%d,(a,b,c),b,c); 则“(a,b,c)”是一个逗号表达式,它的值等于c的值,括号内作为一个表达式,括号内的逗号不是参数间的分隔符,而是逗号运算符。,7.7 逗号表达式,第七章 运算符和表达式,7.8关系表达式,关系表达式用来实现两个运算对象之间的大小关系的比较。 1.关系运算符 (大于)、 =(大于或等于)、=(等于)、!=(不等于) 关于优先级次序: (1)其中,前四个优先级别相同,后
14、两个优先级别相同,前四个优先级高于后两个。 (2)关系运算符的优先级低于算术运算符。 (3)关系运算符的优先级高于赋值运算符。,第七章 运算符和表达式,2.关系表达式 用关系运算符将两个表达式(连接起来的式子,称为关系表达式。 如:ab,abbc,(a=3(b=5), ab)(bc) 关系表达式的值是逻辑值“真”或“假”,C语言中以“非零”代表“真”,以“0”代表“假”。在关系表达式求解时,以“1”代表“真”,以“0”代表“假”。当关系表达式成立时,表达式的值为1,否则,表达式的值为0。,7.8关系表达式,第七章 运算符和表达式,如:关系表达式“5=3”的值为0, 关系表达式“5=0”的值为1
15、。 如:a=3,b=2,c=1,则: ab的值为“真”,表达式的值为1 (ab)=c的值为“真”,表达式的值为1 bca的值为“假”,表达式的值为0,7.8关系表达式,第七章 运算符和表达式,7.9 逻辑表达式,1.逻辑运算符 &(逻辑与)、|(逻辑或)、!(逻辑非) “&”和“|”是“双目运算符”,它们要求有两个运算对象(操作数)。 如:(ab)&(xy),(ab)|(xy)。 “!”是单目运算符,只要求有一个运算对象。 如!(ab)。,第七章 运算符和表达式,7.9 逻辑表达式,逻辑运算符的优先级:,逻辑运算符的运算规则如下: a&b:仅当a、b同时为真时,a&b为真,其它情况a&b为假
16、a|b:仅当a、b同时为假时,a|b为假,其它情况a|b为真 !a:若a为真,!a为假;若a为假,!a为真,第七章 运算符和表达式,2.逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式,其的值是一个逻辑量“真”或“假”。 在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”,即将一个非零的数值认作为“真”, 如:(1)若a=4,则!a的值为0,因为a的值为非0,被认作“真”,对它进行“非”运算,得“假”,“假”以0代表。 (2)若a=4,b=5,则a&b的值为1,因为a和b均为非0,被认为是“真”,因此a&b的值也为“真”,值为1。,7.9 逻辑表达式,第七章 运算符
17、和表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。 如: (1)a&b&c只有a为真(非0)时,才需要求b的值以及判别b的值,只有a和b都为真的情况下才需要求c的值以及判别c的值。只要a为假,就不必求解和判别b和c(此时整个表达式已确定为假)。如果a为真,b为假,也不需判别c。 (2)a|b|c只要a为真(非0),就不必判断b和c;只有a为假,才判别b;a和b都为假才判别c。,7.9 逻辑表达式,第七章 运算符和表达式,7.10 条件表达式,条件表达式的一般形式为: 表达式1?表达式2:表达式3,它的执行过程:,
18、第七章 运算符和表达式,说明: (1)条件运算符的执行顺序:先求解表达式1,若为非0,则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0,则求解表达式3,表达式3的值就是整个条件表达式的值。,如:max=(ab)?a:b 执行结果就是将条件表达式的值赋给max,也就是将a和b二者中的大者赋给max。,7.10 条件表达式,第七章 运算符和表达式,(2)条件运算符仅优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。,7.10 条件表达式,第七章 运算符和表达式,7.11 位运算,所谓位运算是指进行二进制位的运算。 1位运算符 C语言
19、提供了6种位运算符:,第七章 运算符和表达式,2位运算符功能实现 (1)“按位与”运算 按位与运算符“&”是双目运算符,其功能是参与运算的两数各对应的二进制位相“与”。只有对应的两个二进制位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。,7.11 位运算,如:9&5可写算式如下:,9&5=1。,第七章 运算符和表达式,例7.4“按位与”运算示例 main( ) int a=9,b=5,c; c=a&b; printf(a=%dnb=%dnc=%dn,a,b,c); 程序运行结果: a=9 b=5 c=1,7.11 位运算,第七章 运算符和表达式,(2)“按位或”运算 按位或运算
20、符“|”是双目运算符,其功能是参与运算的两数对应的二进制位相“或”。只要对应的两个二进制位有一个为1时,结果位就为1。参与运算的两个数均以补码方式出现。,7.11 位运算,如:9|5可写算式如下:,9|5=13,第七章 运算符和表达式,例7.5“按位或”运算示例 main( ) int a=9,b=5,c; c=a|b; printf(a=%dnb=%dnc=%dn,a,b,c); 程序运行结果: a=9 b=5 c=13,7.11 位运算,第七章 运算符和表达式,(3)“按位异或”运算 按位异或运算符“”是双目运算符,其功能是参与运算的两数各对应的二进制位相异或。当两个对应的二进制位相异时,结果为1。参与运算数级以补码方式出现。,如:95可写成算式如下:,7.11 位运算,第七章 运算符和表达式,例7.6“按位异或”运算示例 main( ) int a=9; a=a5; printf(a=%dn,a); 程序运行结果:a=12,7.11 位运算,第七章 运算符和表达式,(4)“按位求反”运算 求反
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都天府生物产业孵化园三期项目水土保持方案报告表
- 安徽省就业指导中心:皖地职场指南
- 利用微信上传试题答案判刑
- 董事长办公室会客预约制度
- 考试命题审查制度
- 精神科病人请假制度
- 2025-2026学年云南曲靖市宣威市民族中学等校高一第二学期开学英语试题
- 2026中国石化石油工程技术研究院博士后招聘备考题库及参考答案详解【基础题】
- 2026广东茂名市公安局招聘警务辅助人员67人备考题库及完整答案详解【历年真题】
- 2026春季中国工商银行云南分行校园招聘180人备考题库1套附答案详解
- 教师读书分享《做温暖的教育者》
- QCT1177-2022汽车空调用冷凝器
- 2.1科学探究感应电流的方向课件-高二物理(2019选择性)
- 2024陆上风电场安全生产标准化实施规范
- 基于PLC的混凝土搅拌站控制系统设计
- 药品经营和使用质量监督管理办法培训
- 2024年福建厦门航空招聘笔试参考题库附带答案详解
- 《仪表飞行课程》课件
- 角度测量-水平角测量误差与注意事项(水利水电工程测量课件)
- 工商管理专业 酒店业人力资源流动管理分析
- 外国文学史(下)-马工程
评论
0/150
提交评论