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

下载本文档

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

文档简介

运算符与表达式 l 运算符(operator)也称为操作符,对程序中的数据进行运算。参与运算的数据称为操作 数(operand)。 l 变量、字面常量等通过运算符组合成表达式,一个表达式也能作为操作数来构成更复 杂的表达式。 l 表达式(expression)是构成程序语句的基本要素。 对于运算符,应注意以下几方面。 (1) 运算符的功能和语义。 (2) 运算符的操作数。每个运算符对其操作数的个数、类型和值都有一定限制。 (3) 运算符的优先级(precedence)。每个运算符都有确定的优先级。 (4) 运算符的结合性(associativity)。 运算符说说明示例 +、-正负号 +、-加,减x=y+z,x=y-z %取余x=y%z *、/乘,除x=y*z,x=y/z +/-自增和自减运算符 C+语言中包含了丰富的运算符,主要有算数运算符、关系运算符、逻辑运算符、 赋值运算符和位运算符。下面逐一介绍这些常用的运算符。 1.1 算数运算符 算数运算符主要用于算数运算。 注意: 对于除,若两个操作数都是整数,结果为整数(商部分)。 1/2=0 5/2=2 %通常称为取模运算,两个操作数必须都是整型数,结果为余数,余数的符号与左边数的符 号等同。 3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0 在算术运算中需要注意溢出问 题。 两个整数做加法、减法或乘法运算时,即便结果溢出也不是错误。 例如:short s1 = 32765; s1 = s1 + 3;/结果是否超过short的最大值? coutb大于TRUE,如果a大于b a=b大于等于TRUE,如果a大于或者 等于b 关系运算的结果是一个表示“真”或“假”的逻辑值,即一个bool值。当关系成 立时,其运算结果为真;当关系不成立时,结果为假。但C/C+语言中没有逻辑 型,关系运算的结果要用一个int值表示,0即为假,1即为真。 l 关系运算符的优先级为(括弧中运算符的优先级相同):(、=、 b = c; /等价于d = (a b) = c); d的值为0 d = a = b b b) 2 0 , ab+c 0 , a=2 1,a=a 0,aa 0,b=a=2 1 条件语句中用“=”来判断浮点数是否相等,结果是 不等,但d1+d2输出结果却是7.7777。两个实型数即 便输出结果完全一样,其内部值也可能不一样。判断 两个实数是否相等的正确方法是:判断两个实数之差 的绝对值是否小于一个给定的允许误差数,如判断d1 是否等于d2时,应改为: fabs(d1 +d2-7.7777) =、 int d = a = b; /d的值为0 赋值赋值 运算符名称效果 =赋值x=10 +=赋值与和x+=10(等于x=x+10) -=赋值与减x-=10 *=赋值与乘x*=10 /=赋值与除x/=10 与a+=3;有没有区别 ? 1.5 位运算符 u 位运算是指对字节内部的二进制位进行移位或逻辑运算。 u 位运算是通过位运算符来完成的。 u 位运算的操作数必须是char、short、或int值,而且结果也是char、short或int值。 u 除了按位求反是单目运算符,其余位运算都是双目运算符。 u C+提供了两类位运算:移位运算和按位逻辑运算。 1.5.1. 移位运算符 移位运算符的格式为: operand n 将操作数operand向右移动n个二进制位,保持符号不变。 其中,n为整数。注意移位运算并不改变operand本身的值。例如: 比如 2与cin可能混淆,可用括号消除这些错误,例 如cout右移 (4)按位逻辑异或“”也是对两个操作数逐位进行运算。异或运算的规则是,若对应位不同,则该 位结果为1,否则为0。例如: short int c = 0x5a 0x26/结果为0x7c 按位逻辑异或有一个特点,如果a b = c,那么c b = a。b将a转换为c,也能将c再复原 为a。显然,两个相等的值异或运算,结果为0。不相等的两个值异或运算结果不为0。 1.6 new和delete new和delete是c+新增的运算符,实现存储的动态分配和释放功能。new可以用 于动态申请内存空间,为各种数据类型分配内存。用户可以使用new申请一段内存空间 ,如数组、结构体或整型变量等。new运算符返回系统分配的内存空间的首地址,需要 相应类型的指针保存该地址。 下面3种方式都可以正常申请内存空间。 /定义一个整型指针 Int *p; /定义一个未初始化的int型变量 p=new int; /定义一个指针变量,并初始化该内存区域内容为12 Int *p1=new int(12); /定义一个指针变量,指向10个整型变量区域。该区域与数组类似,可以像访问数组一 样访问该区域 Int *p2=new int10; 在使用完毕new申请的内存空间后,用户需要释放该内存空间。如果用户只申请内 存空间,并不释放,会占用大量的内存空间,使系统运行速度变慢,甚至会造成系统崩 溃。因此,在使用完申请的内存空间后,用户需要使用delete释放申请的内存空间。下 面代码删除以上申请的内存空间。 delete p; delete p1; delete p2; 使用new和delete需要注意一下几点: l 用new申请的内存空间,必须用delete释放 l 对于已分配内存空间的指针,只能用delete释放一次;否则,系统会出现错误。 l delete释放的内存空间,必须是new分配内存空间的首地址 l 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进 行访问. 1.7 运算符的优先级 优先级指定了表达式求值的运算顺序,运算顺序一般符合数学中的数学运算规则。 为保持这种运算顺序,需要为运算符设置优先级,优先级高的运算符先运算,优先级低 的运算符后运算,优先级相同的运算符由运算符的结合性决定运算顺序。如果有必要, 可以使用括号等运算符改变表达式的运算顺序。 下面列出了从高到底运算符的优先级。同一行中的运算符具有相同的优先级, 此时这些运算符的结合方向决定了求值顺序 结结合方向运算符 自左至右 - 自左至右! + - -(负号) ( )*(指针) float f = 32.2f; 则计算以下表达式:a / f 处理过程为:先将a的值转换成float型,然后再进行 浮点数的除法运算,结果为一个float值3.10559。在 这个过程中a变量的值不改变。 规则1 两个不同类型的操作数进行运算时,先将较小范围的数值转换为另一个较大范围 的数值,然后再进行计算。各种基本数据类型的数值范围从小到大排列次序如下: 按规则1可知,两个有符号的值之间进行算术运算,其结果是有符号的。一个无符号的 值与一个浮点数(如float)进行算术运算,其结果是浮点数(如float)。但两个无符号的值 之间进行算术运算(两个值中没有unsigned int),其结果是有符号的int。 例如: unsigned char c1 = 2; unsigned short s1 = 3; cout较小范围的整数(如short),将截断高位字节,仅保留低位字节 的值。如果原先数值大于小范围类型可表示的范围,将将出错。 较小范围的整数(如char或float)较大范围的整数(如int或double),将保持原值不改 变。 赋值类型转换出现在初始化表达式或者赋值表达式中。当初始化或赋值运算符的左值表达式 的类型与右值表达式类型不同,且类型兼容时,将进行类型转换到左值类型。即先计算出右 值表达式的值,然后将其转换为左值类型后再赋给左值。 一般情况下,编译器对于可能导致数据丢失的情形会给出警告,但不完全。不经意之 间就可能产生意料不到的结果。例如: int i = 2, j = 4; double df; df = i/j*100;/i/j的值为0,而不是0.5 cout () 或者 () 例如: int a = 7, b = 2; double y1 = a / b 此时y1的值是3.0。但如果程序员希望得到3.5,就要对除法的操作数进行强制类型 转换如下: y1 = double(a)/b 或者 y1 = (double)a/b 或者 y1 = a / double(b); 关于强制类型转换,说明以下两点。 (1)一个强制类型转换是否正确取决于所处理的值的范围,一般来说,强制转换是不安全的。 (2) 类型强制转换作用于一个表达式,并非作用于数据存储单元,即不改变变量存储的类型 和值 例如: double width = 2.36, height = 5.5, area1; int

温馨提示

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

评论

0/150

提交评论