




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三讲 运算符以及数据类型2.6 运算符及表达式2.7 数据类型转换2.8 类型定义2.6 运算符及表达式 C语言运算符可以分为:算术运算符、逻辑运算符、关系运算符、位运算符、赋值运算符。2.6.1 算术运算符和算术表达式算术运算符和算术表达式1. 算术运算符:加、减、乘、除及取模即:算术运算符:加、减、乘、除及取模即:+,-,*,/,%来表示。来表示。C语言规定:语言规定:(1)模运算符)模运算符%,仅用于整型变量或整型常量。,仅用于整型变量或整型常量。(2)优先级:一个表达式中如有多个运算符,则计算先后次序为相应)优先级:一个表达式中如有多个运算符,则计算先后次序为相应运算符的优先级高的优
2、先。乘、除、模优先级高于加、减的优先级。运算符的优先级高的优先。乘、除、模优先级高于加、减的优先级。(3)结合方向:是一个运算对象两侧的运算符的优先级别相同时,应)结合方向:是一个运算对象两侧的运算符的优先级别相同时,应遵循的处理规则。遵循的处理规则。算术运算符的结合方向是从左至右;算术运算符的结合方向是从左至右;赋值运算符的结合方向是从右至左。赋值运算符的结合方向是从右至左。2.算术表达式:由算术运算符、括号以及操作对象组成的符号算术表达式:由算术运算符、括号以及操作对象组成的符号C语言语言语法规则的表达式称为算术表达式。语法规则的表达式称为算术表达式。2.6.2 赋值语句1. 赋值运算符语
3、言的赋值运算符是“=”,它的作用是赋值运算符右边表达式的值赋给其左边的变量。例如:a=10,x=a+5,前者是把常量10赋给变量a,后者是将表达式a+5的值赋给变量x.注意:如果“=”两侧的类型不一致,在赋值时要进行类型转换。例如a=b,执行该语句时,b的结果转换为a的类型后才能进行赋值运算。2. 复合赋值运算符C语言允许在赋值运算符“=“之前加上其它运算符,以构成其复合运算符。复合运算符多数为双目。复合运算符有:+=,-=,*=,/=,%=,=,&=,=,|=例:a+=2 等价于 a=a+2x*=y+5 等价于 x=x*(y+5)x%=8 等价于 x=x%8赋值运算符都是自右向左执行
4、。3. 赋值语句与赋值表达式赋值语句与赋值表达式赋值语句最简单的形式是:= ;功能:是赋值运算符右边的“表达式”的值赋给左边的变量。赋值表达式也可以包含复合的赋值运算符,例:如果a=10,表达式a+=a-=a*a的值为-180。其步骤为:(1)先进行a-=a*a的计算,它相当于a=a-a*a=10-10*10=-90.(2)再进行a+=-90的计算,它相当于a=a+(-90)=-90-90=-180.4. 自增自减运算符自增自减运算符i+(或i-)表示在使用该表达式值之后将i值加1(或减1)。+i(或-i)表示在使用该表达式值之前将i值加1(或减1)。说明:(1)+和-仅适用于变量,不能用于常
5、量或表达式。(2)+和-运算符的结合方向是“至右向左”。Main()int a=100;printf(“a+=%dn”,a+);printf(“+a=%dn”,+a);printf(“a-=%dn”,a-);printf(“-a=%dn”,-a);输出结果:输出结果:a+=100+a=102a-=102-a=1002.6.3 关系运算符和关系表达式1. 关系运算符关系运算符均为两目运算符。共有六种: 大于 = 大于等于 = 小于等于= 等于 != 不等于关系运算符要求两个操作数是同一种数据类型,其结果为一逻辑值,即关系成立时,其值为真(true),用非0值表示;关系不成立时,其值为假(fals
6、e),用0表示。关系运算符的优先级借低于算术运算符,关系运算符=和!=低于前四种运算符,并且结合方向均为自左至右。2. 关系表达式由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。如:a+bb;c的值为1,若a=1,b=8,x=ab;x的值为0。2.6.4 逻辑运算符和逻辑表达式1.逻辑运算符 逻辑运算符有“&“(逻辑与)、”|“(逻辑或)和”!“(逻辑非)三种。 逻辑运算符的操作对象为零或非零整数值,见表2.4.表2.4 逻辑运算规则数据a数据ba&ba|b!a!bTTTTFFTFFTFTFTFTTFFFFFTT 逻辑表达式 由逻辑运算符和其操作对象组成表达式称为
7、逻辑表达式。2.6.5 位运算符位(bit)运算是C语言的一大特色,可直接对构成内存的基本单位“字节”(byte)进行按位操作。按位与(&)操作规则:参加运算的两个运算量,如果两个相应的位均为1,则该位的结果为1,否则为0,见表2.5 表2.5 接位与运算量10101运算量20011结果0001例如:(1)清零。 (2)取一个数中的某些位。高位清零: 00101101 10011100& 00000000 11111111 00000000 10011100低位清零: 00101101 10011100 & 11111111 00000000 00101101 0000
8、0000l按位或(|)l操作规则:参加运算的两个运算量,其相应的位中只有一个为1,则该位的结果为1,否则为0。l 表2.6 按位或运算量10101运算量20011结果0111例如: (1) 01000001 | 00101001 01101001(2) 01000001 | 00000000 01000001(3) 01000011 | 11111111 11111111(4) 01000001 | 10111110 11111111例如:将某一个数的某些位置为1。一个整数a,要将其低字节全置为1,即低字节为11111111,可将该数与255(十六进制为FF,二进制为11111111)按按位或
9、即可。l按位异或()l操作规则:参加运算的两个运算量,当相应位相同时,其结果在该位为0,相应位不同时,其结果在该位为1,即按位相加,但不进位。l 表2.7 按位异或运算量10101运算量20011结果0110(1)使指定位翻转。即由1变为0,由0变为1。例: 01100110 00001111 01101001 (2)不使用临时变量,交换两个值。方法为:若有两个数a和b,通过下面的赋值语言可将 a和b的值互换:a=ab;b=ba;b=ab;4. 按位求反()操作规则:运算符是一个单目运算符,用来对一个数二进制表示按位求反,即瘵0变成1,将1变成0。 表2.8 按位求反运算量01结果10例: 0
10、1101001 10010110将一个数的某些位变为0。方法是:瘵该数a与b按位求与,此处的b为这样的一个数,即要求为这样的一个数,即要求a 中变为中变为0的那的那些位均为些位均为1,其余位均为,其余位均为0。如要将。如要将a的最低位变为的最低位变为0,则可使用下述表达式实现。则可使用下述表达式实现。A=a&15 . 左移()操作规则:将一个数的各二进制位全部左移若干位,左移后,右边的这些位用0填补,左边移出的位舍弃不用。例:a=a2;若a=15,即二进制00001111,左移两位后变为00111100。若再向左移4位,则变为11000000。将一个数左移1位,相当于该数乘以2,左移2
11、位相当于该数乘以4。如上例中a=15,则a=a)操作规则:将一个数的各二进制位全部右移若干位,右移后,右边移出的位被舍弃,而左边的填补分两种情况:(1)该数为无符号数,则高位补0。例:a=a2;右a=15,二进制为00001111,右移两位后为00000011。(2)该数为有符号数,若原来的符号位为0(最高位为0,即正数)则高位补0,若原来的符号位为1(即表示该数为负数),高位补0或1,取决于所使用的计算机系统。有的系统补0,称为逻辑右移,有的系统补1,称为算术右移。例:a:1000110110000111a1:0100011011000011(逻辑右移)a1:1100011011000011
12、(算术右移)2.6.6 其他运算符l逗号运算符l逗号运算符为“,“。逗号表达式是用逗号运算符把两个表达式组合成的一个表达式。其一般形式为l表达 式1,表达式2l说明:l(1)逗号表达式的执行过程是:先求表达式1的值,再求表达式2的值,表达式2的值就是整个逗号表达式的值。l(2)一个逗号表达式可以与另一个表达式构成一个新逗号表达式。l(3)逗号运算符是所有运算符中级别最低的。l(4)逗号表达式常用于for语句中,它可以表达多个初值或多个步长增量。l逗号表达式的一般形式可以扩展为l表达式1,表达式2,表达式3,表达式Nl表达式n的值是整个表达式的值。l条件运算符l条件运算符是一个三目运算符,把三表
13、达式组合成一个表达式。其一般形式为l表达式1?表达式2:表达式3;l功能:计算表达式1的值,如果该值为真(非0值),则计算表达式2的值,并且该值即为条件表达式值。若表达式1的值为假(0),则计算表达式3的值,并将该值作为条件表达式的值。l说明:l(1)条件运算符优先级别高于赋值运算符,低于关系运算符和算术运算符。l(2)条件运算符结合方向是“自右至左”。l(3)表达式1与表达式2、表达式3类型可以不同。3. Sizeof运算符运算符sizeof运算符是测试变量、表达式或类型名所占用的字节数。有两种用法。sizeof表达式:测试表达式所占用的字节数。sizeof表达式:测试类型名所占用的字节数。
14、例如: sizeof(float)其值为4。sizeof运算符可以出现的表达式中。main() int a=4; fload b=5.6; printf (“%d,%dn”, sizeof(a), sizeof(b);输出结果:2,42.7 数据类型转换 在内存中,字符是以系统中所使用字符的编码值形式存储的,C语言允许字符型数据和整型数据之间通用一个字符型数据,即可以以字符形式输出,也可以以整型形式输出,同时,字符型数据可能赋给整型变量,整型数据也可以赋给字符型变量,只是当整型变量数据的大小超过字符型变量的表示范围时,需要截取相应的有效位。 除字符型数据和整型数据之间可以通用之外,不同类型的数
15、据在进行混合运算时,往往需要进行强制类型转换。因此类型转换有两种方式:一种是自动类型转换;另一种是强制类型转换。2.7.1 自动类型转换 在进行计算时,首先将不同类型的数据转换成同一类型,然后进行计算不同类型数值转换规则:Double floatLong UnsignedInt char ,short2.7.2 强制类型转化 强制类型转化的一般形式如下所示: (强制的类型名)变量例如:(int)(a+b),将a+b的结果强制转换成int型; (float) a/b,将a的结果强制转换成float型后,再进行计算。注意:经强制类型转换后,得到的是一个所需类型的中间变量,原来变量的类型并没有发生任何变化。2.8 类型定义C语言允许使用typedef语句定义新类型名,以取代已有类型名,如:typedef int counter;作用是定义counter等价于基本数据类型名int,以后就可以利用counter来定义int型变量了。如:count
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6.3二氧化碳的实验室制取(第二课时)-人教版九年级《化学》上册教学课件
- 智能预约系统优化景区游客容量管理-洞察阐释
- 图论在量子计算中的潜力-洞察阐释
- 高中音乐跨学科教学中的评估与反思策略
- 高中科技创新跨学科教学在提升学生综合能力中的作用
- 2025至2030年中国洗模剂行业投资前景及策略咨询报告
- 高中思想政治教师跨学科素养与专业发展路径
- 初三数学专题复习教学设计和教学
- 《资源跨区域调配》教学设计(第一课时)
- 四川省泸州市2022-2023学年高二下学期期末数学(文科)试题(教师版)
- 2025设备租赁合同版本范文
- 2025年四川省成都市初中学业水平考试生物试题(无答案)
- 医院感染教学课件
- 民航危险品运输典型案例55课件
- 仓库管理制度及流程
- 四川省绵阳市名校联盟2025届八年级物理第二学期期末复习检测试题含解析
- 2025-2030中国烘焙食品行业市场发展分析与发展趋势及投资风险研究报告
- 2024北京西城区五年级(下)期末数学试题及答案
- AI技术在智能护理中的应用和挑战
- 2025年瑜伽教练资格证考试题库:瑜伽教练职业培训教学案例试题
- 陕西2025年陕西杨凌示范区事业单位招聘15人笔试历年参考题库附带答案详解
评论
0/150
提交评论