




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.4 C语言的运算符与表达式,变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合C语法规则的式子被称为表达式。,运算符的分类: 单目运算符:只带一个操作数的运算符。如:+、-运算符。 双目运算符:带两个操作数的运算符。如:+、-运算符。 三目运算符:带三个操作数的运算符。如:?运算符。,学习运算符时应注意: 运算符的功能:该运算符主要用于做什么运算。 与运算量关系:要求运算量的个数及运算量的类型。 运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。 运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。 运算结果的类型:表达式运算后最终所得到的值的类型。,运算符的优先级和结合性,1. 赋值运算符、赋值表达式,赋值运算符(“”,双目运算符),一般形式:,变量 = 常量或变量或表达式,功能:将右边常量或变量或表达式的值赋给左边变量,例如: int x, y, z; x = 20; y = x; z = x + y;,赋值表达式,定义:,由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一个表达式连接起来的表达式,称为赋值表达式。,一般格式:,变量 (复合)赋值运算符 表达式,赋值表达式的值:被赋值变量的值。,例如:“a = 5”这个赋值表达式,变量a的值“”就是它的值。,赋值语句,例如: x = 8; a = b = c = 5;,定义:赋值表达式在其后面加分号就构成了赋值语句。,赋值运算符及赋值表达式的使用,多个变量连续赋值,例如: a = b = c = 10;,a = (b = (c = 10);,结果:a、b、c的值都为10,赋值表达式的嵌套,例如: a = (b = 2) + (c = 3),( a = (b = 2) + (c = 3),结果:b为2,c为3,a为b+c即5,注意: 赋值语句“=”左边必须是变量名或对应某特定内存单元的表达式(后面的章节会遇到这样的表达式),不能是常量或其它表达式。 例如:30 = a; b + 2 = 5; 都是错误的。 赋值语句中的“=”表示赋值,不是代数中相等的意思。要表示相等的意思则应用关系运算符“=”表示,二者切勿混淆!,2. 强制类型转换符,C语言的数据类型是可以相互转换的。转换的方法有两种:一种是自动转换,一种是强制转换。,自动转换,例如:int a = 2.5; 则a的值将是2,而不是2.5。 这种自动改变等号右边表达式值的数据类型的操作称为数据类型的自动转换。,首先将等号右边的表达式的值转换成“=”左边的数据类型。然后再赋值给等号左边的变量。,(1) 短长度的数据类型 长长度的数据类型,方法:直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。,无符号短长度的数据类型 无符号或有符号长长度的数据类型,xxx,无符号短长度的数据类型,0,0,.,.,.,.,.,0,.,.,.,.,.,高位部分补0,例如: unsigned char ch = 0xfc; unsigned int a = 0xff00; /假设int数据为16位 int b; unsigned long u; b = ch; /b的值将是0x00fc u = a; /u的值将是0x0000ff00,2. 强制类型转换符,自动转换,(1) 短长度的数据类型 长长度的数据类型,方法:直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。,有符号短长度的数据类型 无符号或有符号长长度的数据类型,zxx,有符号短长度的数据类型,z,符号位向高位部分扩展,z,z,符号位,例如: char ch = 2; int a = -2; int b; unsigned long u; b = ch; /b的值将是2 u = a; /u的值将是0xfffffffe,2. 强制类型转换符,自动转换,(2) 长长度的数据类型 短长度的数据类型,方法:直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。,例如: int a = -32768; /假设int数据为16位 unsigned long b = 0xffffaa00; char ch; int c; ch = a; /ch的值将是0 c = b; /c的值将是0xaa00,(3) 长度相同的数据类型转换,方法:数据按照原样复制即可。,例如: int a = 0xff00; unsigned int b = a; /b的值将是0xff00,2. 强制类型转换符,强制转换,强制类型转换是通过类型转换运算来实现的。其一般形式为:,(类型说明符) (表达式),功能:把表达式的运算结果强制转换成类型说明符所表示的类型。其中,(类型说明符)是强制类型转换符,它的优先级比较高。,例: float x = 3.5, y = 2.1, z; int a; a = (int)(x+y); /结果为5 z = (int)x+y; /结果为5.100000 z = (double)(3/2); /结果为1.000000 a = (int)3.6; /结果为3,精度损失问题,注意:在使用强制转换时应注意以下问题: 类型说明符和表达式都必须加括号(单个变量可以不加括号)。 例如:把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。 例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,基本算术运算符: + - * / % 结合方向:从左向右 优先级: - -* / % - + - (2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,例: 5 / 2 = -5 / 2.0 =,例: 5 % 2 = -5 % 2 = 1 % 10 = 5 % 1 = 5.5 % 2,3. 算术运算符、算术表达式,2,-2.5,1,-1,1,0,(),表达式和算术表达式,3. 算术运算符、算术表达式,表达式:用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子。 算术表达式:表达式中的运算符都是算术运算符的表达式。,运算符优先级(到目前为止),例: 3 + 5 * 8、(x + y) / 2 - 1等,自增、自减运算符+ - 作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i=i+1或i=i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i=i+1或i=i-1),例: j = 3; k = +j; j = 3; k = j+; j = 3; printf (“%d”, +j); j = 3; printf(“%d”, j+); a = 3; b = 5; c = (+a) * b; a = 3; b = 5; c = (a+) * b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,4. 自增自减运算符,自增、自减运算符注意事项 +和-运算符只能用于变量,不能用于常量和表达式。 因为+和-蕴含着赋值操作。 例如:5+、-(a+b)都是非法的表达式。 负号运算符、+、-和强制类型转换运算符的优先级相同,当这些运算符连用时,按照从右向左的顺序计算,即具有右结合性。 两个和之间不能有空格。 在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。 例如:+i+是非法的。 自增、自减运算,常用于循环语句中,使循环控制变变量加(或减)-,以及指针变量中,使指针指向下(或上)一个地址。,4. 自增自减运算符,例: int p, i = 2, j = 3; p = -i+; p = ? i = ? p = i+j; p = ? i = ? j = ? p = i+-j; p = ? i = ? j = ? p = i+-j; p = ? i = ? j = ? p = i+i+; p = ? i = ? p = +i+(+i); p = ? i = ?,-2,3,5,3,3,4,2,2,4,3,2,4,4,8,4,算术运算符中数据类型转换规则,#include void main ( ) float a, b, c; a = 7 / 2; /计算7/2得int型值3,因此a的值为3.0 b = 7 / 2 * 1.0; /计算7/2得int型值3,再与1.0相乘,因此b的值为3.0 c = 1.0 * 7 / 2; /先计算1.0*7得double型的结果7.0,然后再计算 7.0/2,因此c的值是3.5 printf (“a = %f, b = %f, c = %f“, a, b, c); ,a = 3.000000,b = 3.000000,c = 3.500000,5. 位运算符、位运算表达式,位运算符:按位与(&)、按位或(|)、按位取反()、按位异或()、左移()六种。,左移() 实现将某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出的低位用零填补。其一般格式为:,返回整型值的表达式 返回整型值的表达式,例: int a = 3; a 2:将a所对应的二进制数左移两位,该表达式的值为12。 2 a:将2所对应的二进制数左移三位(a的值), 该表达式的值为16。,右移() 右移运算实现将某变量所对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填1,正数填0)。其一般格式为:,返回整型值的表达式 返回整型值的表达式,例:int a = 8; a 2:将a所对应的二进制数右移两位,该表达式的值为2。,例: 将short类型数据的高、低位字节互换 #include void main ( ) short a = 0xf245 , b, c; b = a 8 ; /将a的高8位移到低8位赋值给c,c的值为0xfff2 c = c ,a = 0x45f2,位运算之间的优先级 & |,6. 复合赋值运算符,种类: += -= *= /= %= = &= = |= 含义: exp1 op= exp2 exp1 = exp1 op exp2,定义:将算术运算符、位运算符与赋值运算符组合在一起就构成了复合赋值运算符。复合赋值运算符即包含了算术运算或位运算,又包含了赋值操作。,例: a=12; a+=a-=a*a;,/a=-264 等价于a=a+(a=a-(a*a),例: int a=2; a%=4-1; a+=a*=a-=a*=3;,/a=0 等价于a=a+(a=a*(a=a-(a=a*3),7. 关系运算符和关系表达式,关系运算符,关系表达式,用关系运算符连接起来的式子称为关系表达式。 关系表达式的一般形式为:表达式 关系运算符 表达式,例:a + b c d x 3 / 2 a + 1 c i 5 * j = k + 1,注意: C语言用0表示假,非0表示真。 一个关系表达式的值不是0就是1,0表示假,1表示真。,关系运算符的优先级,例如: c a + b 等价于: a b != c 等价于: a = b c 等价于: a 2 b | c 等价于:,c (a + b),(a b) != c,a = (b c),a = (b c),(a 2) (c + d),(a & (4 b) | c,已知:a = 1; b = 2; c = 3; 问:d = a != c = a b c;的值?,答:d 的值为1。 等价于:d = (a != c) = (a b) c);,关系运算注意:,例 若a = 0; b = 0.5; x = 0.3; 则 a = x = b的值为,0,例 5 2 7 8在C中是 允许的,值为,0,例 int i = 1, j = 7, a; a = i + (j % 4 != 0); 则a =,2,例 a0 结果为 A100 结果为,1,0,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,8. 逻辑运算符和逻辑表达式,逻辑运算符,逻辑运算真值表,例如: a b & x y 等价于: a = b | x = y 等价于: !a | a b 等价于: !a b 等价于: c = a | b 等价于: a | 7 & b & 8 等价于: a 2 & b 1 等价于:,逻辑表达式,用逻辑运算符连接起来的式子称为逻辑表达式。 逻辑表达式的一般形式为:表达式 逻辑运算符 表达式,例:a 10 | x -10、!x & !y,逻辑运算符的优先级,(a = x) & (x = b),(a b) & (x y),(a = b) | (x = y),(!a) | (a b),(!a) b,c = (a | b),(a | 7) & (b & 8),(a 2) & (b 1),已知:a = 4; b = 5; 问:c = b 3 的值?,答:c 的值为1。 等价于:c = (b 3) ,例: a = 4; b = 5; !a a & b a | b !a | b 4 & 0 | 2 5 3 & 2 | 8 4 - !0 c & d,/值为0,/值为1,/值为1,/值为1,/值为1,/值为1,/值为1,逻辑运算注意:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例 a (m = a b) & (n = c d),/结果:m = 0, n = 1,条件运算符可嵌套 如 x 0 ? 1 : (x 0 ? -1 : 0) 优先级: 13,9. 条件运算符与表达式 一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c,结合方向:自右向左 如 a b ? a : c d ? c : d a b ? a : (c d ? c : d) expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5,10. 逗号运算符、逗号表达式,位运算符:, 逗号表达式:用逗号连接起来的表达式。其一般形式为:,表达式1,表达式2,表达式k,优先级:优先级最低。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中考语文二模试卷-1
- 福建省厦门市一中2020届高三最后一模考试试题(语文解析版)
- (广东高考卷 自主命题6科)2022年广东省普通高中学业水平选择性考试高考物化生+政史地真题试卷及答案
- 白酒的生产工艺以大曲酒为例77课件
- 《风景园林招投标与概预算》试题A附参考答案详解(预热题)
- 2025年黑龙江省五常市辅警招聘考试试题题库含答案详解(研优卷)
- 2024-2025学年度下学期七年级历史期末复习+期末考试押题课件(一)-2024-2025学年度下学期七年级历史期末复习
- ARDS患者的液体管理策略2025
- Brand KPIs for online education services:BYJUS in India-英文培训课件2025.5
- 初中数学九年级下册统编教案 7.3特殊角的三角函数
- 电动汽车充换电基础设施建设-深度研究
- 2025年贵安发展集团有限公司招聘笔试参考题库含答案解析
- 二年级班主任经验交流精彩演讲稿
- 2025年度招商引资产业园区运营管理合作协议范文3篇
- 《犬猫洁牙手术流程规范》
- 2024版肺栓塞幻灯课件
- 2025中考数学复习专题:八类最值问题汇-总(瓜豆隐圆胡不归阿氏圆将军饮马逆等线费马点构造二次函数求最值)(原卷版)
- 农村煤改电工程施工设计方案
- 2025年1月八省联考新高考语文试卷试题真题(精校打印)
- 2025年郑州铁路局招聘笔试参考题库含答案解析
- 公司驾驶员安全培训内容
评论
0/150
提交评论