C运算符与表达式课件_第1页
C运算符与表达式课件_第2页
C运算符与表达式课件_第3页
C运算符与表达式课件_第4页
C运算符与表达式课件_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C运算符与表达式PPT课件运算符与表达式l 运算符(operator)也称为操作符,对程序中的数据进行运算。参与运算的数据称为操作数(operand)。l 变量、字面常量等通过运算符组合成表达式,一个表达式也能作为操作数来构成更复杂的表达式。 l 表达式(expression)是构成程序语句的基本要素。对于运算符,应注意以下几方面。(1) 运算符的功能和语义。 (2) 运算符的操作数。每个运算符对其操作数的个数、类型和值都有一定限制。(3) 运算符的优先级(precedence)。每个运算符都有确定的优先级。 (4) 运算符的结合性(associativity)。C运算符与表达式PPT课件运算

2、符说明示例+、-正负号+、-加,减x=y+z,x=y-z%取余x=y%z*、/乘,除x=y*z,x=y/z+/-自增和自减运算符 C+语言中包含了丰富的运算符,主要有算数运算符、关系运算符、逻辑运算符、赋值运算符和位运算符。下面逐一介绍这些常用的运算符。1.1 算数运算符算数运算符算数运算符主要用于算数运算。C运算符与表达式PPT课件注意:对于除,若两个操作数都是整数,结果为整数(商部分)。1/2=0 5/2=2 %通常称为取模运算,两个操作数必须都是整型数,结果为余数,余数的符号与左边数的符号等同。3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0在算术运算中需要注意溢出

3、问题。在算术运算中需要注意溢出问题。两个整数做加法、减法或乘法运算时,即便结果溢出也不是错误。两个整数做加法、减法或乘法运算时,即便结果溢出也不是错误。例如:例如:short s1 = 32765; s1 = s1 + 3;/结果是否超过结果是否超过short的最大值?的最大值?couts1endl;/输出输出-32768,而不是,而不是32768。实际上,观察二进制数据,这两个值是一样的。实际上,观察二进制数据,这两个值是一样的。C运算符与表达式PPT课件l +和有前置方式和后置方式。前置方式使操作数增1(或减1),新值参与表达式的运算;后置方式是在操作数参与表达式运算后其值增1(或减1)。

4、例如:+i,-i/在使用i之前,先使i的值加1,减1i+,i-/在使用i之后,使i的值加1,减1l 一元负号运算符对运算对象值取值取负后,返回其(提升后的)副本:Int i=1024;Int k=-i;/k是-1024bool b=true;bool b2=-b;b2=?对大多数运算符来说,布尔类型的运算对象将被提升为int型。如上所示,布尔变量b的值为真,参与运算时将被提升成整数值1,对它求负的结果是-1,将-1再转回布尔值并将其作为b2的初始值,显然这个初始值不等于0,转换成布尔值后应该为1,。所以,b2的值是真!(false可以代表0,但true有很多种,并非只有1)C运算符与表达式PP

5、T课件1.2 关系运算符关系运算符关系运算符主要用于关系比较运算。关系运算符名称效果a=b等于TRUE,如果a等于ba!=b不等于TRUE,如果a不等于bab大于TRUE,如果a大于ba=b大于等于TRUE,如果a大于或者等于b关系运算的结果是一个表示“真”或“假”的逻辑值,即一个bool值。当关系成立时,其运算结果为真;当关系不成立时,结果为假。但C/C+语言中没有逻辑型,关系运算的结果要用一个int值表示,0即为假,1即为真。C运算符与表达式PPT课件l 关系运算符的优先级为(括弧中运算符的优先级相同):(、=、 b = c; /等价于d = (a b) = c); d的值为0 d = a

6、 = b c; /等价于d = (a =( b b b) = c); d的值为1 可以使用()来改变运算符的计算次序。由于浮点数在计算机内进行运算和存储时会产生误差,因此在比较两个浮点数时,建议不要直接比较两数是否相等。例如,执行下面语句:double d1 = 3.3333, d2 = 4.4444;if(d1 + d2 = 7.7777)cout相等endl;elsecout不等endl;coutd1 + d22 0 , ab+c 0 , a=2 1,a=a 0,aa 0,b=a=2 1C运算符与表达式PPT课件条件语句中用“=”来判断浮点数是否相等,结果是不等,但d1+d2输出结果却是7

7、.7777。两个实型数即便输出结果完全一样,其内部值也可能不一样。判断两个实数是否相等的正确方法是:判断两个实数之差的绝对值是否小于一个给定的允许误差数,如判断d1是否等于d2时,应改为: fabs(d1 +d2-7.7777) = 1e-6其中,fabs()是计算绝对值的一个库函数,使用时要包含头文件math.h。C运算符与表达式PPT课件1.3 逻辑运算符逻辑运算符对逻辑值进行运算的运算符就是逻辑运算符。C+语言提供了3个逻辑运算符,用于表示操作数之间的逻辑关系,它们是!(逻辑非)、&(逻辑与)、|(逻辑或)。逻辑运算的结果仍然是逻辑值。逻辑运算符名称效果!a求反TRUE,如果a不

8、为TRUEa&b逻辑与TRUE,如果a与b都为TRUEa|b逻辑或TRUE,如果a或b任一为TRUE逻辑非(!)是单目运算符,它对操作数进行取反运算。当操作数为非0(逻辑真)时,!运算后结果为0(逻辑假)。反之,若操作数为0(逻辑假),!运算后结果为1(逻辑真)逻辑运算符的运算优先级为:! 高于 & 高于|。注意,!的优先级具有较高优先级,甚至高于算术运算符。而&和|的优先级则比算术运算符和关系运算符低。C运算符与表达式PPT课件因C+将逻辑值保存为整数值,这样使得逻辑值可参与所有的运算,而且逻辑运算符可作用于所有类型的值,而没有语法错误提示。这是C/C+语法不严密之处

9、。读者应注意避免。C运算符与表达式PPT课件1.4 赋值运算符赋值运算符l 赋值运算就是将一个表达式的值赋给一个变量。l C+语言提供了两类赋值运算符:基本赋值运算符和复合赋值运算符。l 基本赋值运算符为“=”,复合赋值运算符有多种形式:+=、-=、*=、/=、%=、=、&=、=、|=。 (1) 赋值运算符都是双目运算符,从右向左进行。例如,sum1=sum2=0相当于sum1=(sum2=0),先执行sum2=0,后执行sum1=sum2。(2) 要求赋值运算符左操作数必须是左值,左值能存储值。 例如: x = 3 + 5/正确,x是左值 x - 3 = 5/语法错误,x-3不是左值

10、(3) 复合赋值运算符是将算术运算或位运算与赋值相结合,同一个变量即参加运算,也是被赋值的变量,出现在赋值运算符的两边。复合赋值运算符是一个整体,中间不能用空格隔开。例如: a *= 6/相当于a = a*6 a %= 6/相当于a = a%6 a += 3 + 6 /相当于a = a+(3+6) 初学者容易犯的一个错误就是混淆“=”运算符和“=”运算符。分析下面代码: int a = 5, b = 3; int d = a = b; /d的值为0C运算符与表达式PPT课件赋值运算符名称效果=赋值x=10+=赋值与和x+=10(等于x=x+10)-=赋值与减x-=10*=赋值与乘x*=10/=

11、赋值与除x/=10&=赋值位与x&=0 x02|=赋值位或x|=0 x02答案是有的,对于a=a+1,表达式a被计算了两次,对于复合运算符a+=1,表达式a仅计算了一次。一般的来说,这种区别对于程序的运行没有多大影响,但是当表达式作为函数的返回值时,函数就被调用了两次,而且如果使用普通的赋值运算符,也会加大程序的开销,使效率降低。l a=a+3;与a+=3;有没有区别?C运算符与表达式PPT课件1.5 位运算符位运算符u 位运算是指对字节内部的二进制位进行移位或逻辑运算。u 位运算是通过位运算符来完成的。u 位运算的操作数必须是char、short、或int值,而且结果也是ch

12、ar、short或int值。u 除了按位求反是单目运算符,其余位运算都是双目运算符。u C+提供了两类位运算:移位运算和按位逻辑运算。1.5.1. 移位运算符移位运算符的格式为: operand n 将操作数operand向右移动n个二进制位,保持符号不变。其中,n为整数。注意移位运算并不改变operand本身的值。例如: 比如 22; 值变成8;对于移位运算,注意以下几点:(1)不要尝试对float或double数据进行移位运算,编译会出错。(2)移动位数n应不大于左操作数的位数,如int移位应不大于32。如果n大于左操作数位数,实际移动位数要自动按字长取模:n%(sizeof(int)。例

13、如,i33就是i左移1位。(3)左移位与cout与cin可能混淆,可用括号消除这些错误,例如cout(k3)C运算符与表达式PPT课件1.5.2 位逻辑运算符按位逻辑运算有4个:求反、与&、或|、异或。(1)按位求反“”运算符是一个单目运算符,对操作数逐位取反,得到反码。若二进制位为0,则取反后为1;若二进制位为1,则取反后为0。例如:short int m = 0 xc3 /结果为0 xff3c运算符具有比较高的优先级,高于一般的算术运算符。而其它按位逻辑运算符的优先级则比较低。(2)按位逻辑与“&”对两个操作数逐位进行运算。若对应位都为1,则该位结果为1,否则为0。例如:0

14、 xc3 0000 0000 1100 0011 0 x6e 0000 0000 0110 1110 0 x42 0000 0000 0100 0010short int a=0 xc3 & 0 x6e/结果为0 x42(3)按位逻辑或“|”对两个操作数逐位进行运算。若对应位都为0,则该位结果为0,否则为1。例如: short int b = 0 x12 | 0 x3d/结果为0 x3fC运算符与表达式PPT课件位运算符名称效果a按位反1,如果a不为1a&b按位与1,如果a与b都为1a|b按位或1,如果a或b都不为1ab按位异或1,如果a和b不相同右移(4)按位逻辑异或“”也是

15、对两个操作数逐位进行运算。异或运算的规则是,若对应位不同,则该位结果为1,否则为0。例如: short int c = 0 x5a 0 x26/结果为0 x7c 按位逻辑异或有一个特点,如果a b = c,那么c b = a。b将a转换为c,也能将c再复原为a。显然,两个相等的值异或运算,结果为0。不相等的两个值异或运算结果不为0。C运算符与表达式PPT课件1.6 new和和deletenew和delete是c+新增的运算符,实现存储的动态分配和释放功能。new可以用于动态申请内存空间,为各种数据类型分配内存。用户可以使用new申请一段内存空间,如数组、结构体或整型变量等。new运算符返回系统

16、分配的内存空间的首地址,需要相应类型的指针保存该地址。下面3种方式都可以正常申请内存空间。/定义一个整型指针Int *p;/定义一个未初始化的int型变量p=new int;/定义一个指针变量,并初始化该内存区域内容为12Int *p1=new int(12);/定义一个指针变量,指向10个整型变量区域。该区域与数组类似,可以像访问数组一样访问该区域Int *p2=new int10;C运算符与表达式PPT课件在使用完毕new申请的内存空间后,用户需要释放该内存空间。如果用户只申请内存空间,并不释放,会占用大量的内存空间,使系统运行速度变慢,甚至会造成系统崩溃。因此,在使用完申请的内存空间后,

17、用户需要使用delete释放申请的内存空间。下面代码删除以上申请的内存空间。delete p;delete p1;delete p2;使用new和delete需要注意一下几点:l 用new申请的内存空间,必须用delete释放l 对于已分配内存空间的指针,只能用delete释放一次;否则,系统会出现错误。l delete释放的内存空间,必须是new分配内存空间的首地址l 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问.C运算符与表达式PPT课件1.7 运算符的优先级运算符的优先级优先级指定了表达式求值的运算顺序,运算顺序一般符合数学中的数学运算规则。为保持这

18、种运算顺序,需要为运算符设置优先级,优先级高的运算符先运算,优先级低的运算符后运算,优先级相同的运算符由运算符的结合性决定运算顺序。如果有必要,可以使用括号等运算符改变表达式的运算顺序。下面列出了从高到底运算符的优先级。同一行中的运算符具有相同的优先级,此时这些运算符的结合方向决定了求值顺序C运算符与表达式PPT课件结合方向运算符自左至右 -自左至右! + - -(负号) ( )*(指针)&(地址运算符)sizeof自左至右*(乘法) / %自左至右+、-自左至右 自左至右、=自左至右=、!=自左至右&自左至右自左至右|自左至右&自左至右|自左至右?:自右至左= +=

19、-= *= /= %= &= |= = =自左至右,C运算符与表达式PPT课件表达式l 表达式(expression)是由运算符、括号和操作数(operand)构成的序列,在运行时能计算出一个值的结果。l 按运算符的不同,可将表达式分为算术表达式、赋值表达式、关系表达式、逻辑表达式、逗号表达式等等。按表达式能否放在赋值号的左边还是右边,可将表达式分为左值表达式和右值表达式l 表达式按照其中运算符的优先级和结合性来求值。每个表达式都有确定的运算结果(表达式的值)和所属类型(即结果值的类型),其类型取决于表达式中的运算符和操作数的类型。C运算符与表达式PPT课件类型转换每个运算符的操作数的

20、个数及类型都有特定限制。在一个表达式中,运算符的某个操作数如果不符合类型要求,就要对操作数进行类型转换。C+中的类型转换有3种:自动类型转换、赋值转换和强制类型转换。3.1自动类型转换自动类型转换(也称隐式类型转换)指系统自动地将表达式中的操作数转换成所需类型的值,转换顺序为由范围较小的类型向范围较大的类型转换。char, bool short int float doubleunsigned char unsigned short unsigned int float double例如定义两个变量a和f:int a = 100; float f = 32.2f; 则计算以下表达式:a / f

21、处理过程为:先将a的值转换成float型,然后再进行浮点数的除法运算,结果为一个float值3.10559。在这个过程中a变量的值不改变。规则规则1 两个不同类型的操作数进行运算时,先将较小范围的数值转换为另一个较大范围的数值,然后再进行计算。各种基本数据类型的数值范围从小到大排列次序如下:C运算符与表达式PPT课件按规则1可知,两个有符号的值之间进行算术运算,其结果是有符号的。一个无符号的值与一个浮点数(如float)进行算术运算,其结果是浮点数(如float)。但两个无符号的值之间进行算术运算(两个值中没有unsigned int),其结果是有符号的int。例如:unsigned char

22、 c1 = 2; unsigned short s1 = 3;cout(c1 * s1)endl;/乘法,输出6couttypeid(c1 * s1).name()endl;/输出int规则规则2 对于bool、char、short、int类型,任意两个值之间进行算术运算、位运算,其结果都是一个int值。任意两个值之间进行逻辑运算,其结果都是一个bool值。注意规则2是规则1的一个例外。char c1 = -2;short s1 = 3;cout(c1 * s1)endl;/乘法,输出-6couttypeid(c1 * s1).name()endl;/输出intcout(c1 & s1

23、)endl; /按位与,输出2couttypeid(c1 & s1).name()endl;/输出intcout(c1 & s1)endl; /逻辑与,输出1,表示truecouttypeid(c1 & s1).name()endl;/输出boolC运算符与表达式PPT课件规则规则3。对于bool、char、short、int类型,任一个类型值(无论是否带符号)与unsigned int之间进行算术运算,其结果都是unsigned int类型。注意规则3又是规则2的一个例外。例如:char c1 = -2;unsigned short s1 = 2;unsigned i

24、nt j = 3;cout(c1 * j)endl; /乘法,输出4294967290,而不是-6couttypeid(c1 * j).name()endl; /输出unsigned intcout(s1 * j)endl; /乘法,输出6couttypeid(s1 * j).name()endl; /输出unsigned int由上面例子可知,unsigned int被系统认为是整型数值中的最大范围的类型,因此其它类型与之计算时,都要转换到unsigned int。此时如果另一个整数恰好是负值,而结果是不带符号的正值,就不能得到预期结果,但二进制结果是正确的,例如4294967290与-6是

25、一样的。在处理表达式的过程中,并不是将变量直接转换成最大范围的类型,而是在表达式处理过程中,按照需要逐步进行转换例如: int i=1; char ch=2;float f= 3.0f; double df = 4.0; cout(ch*i+f*2.0-df)较小范围的整数(如short),将截断高位字节,仅保留低位字节的值。如果原先数值大于小范围类型可表示的范围,将将出错。较小范围的整数(如char或float)较大范围的整数(如int或double),将保持原值不改变。赋值类型转换出现在初始化表达式或者赋值表达式中。当初始化或赋值运算符的左值表达式的类型与右值表达式类型不同,且类型兼容时,将进行类型转换到左值类型。即先计算出右值表达式的值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论