高级语言程序设计-从C到C++(第二版)课件:运算符与表达式_第1页
高级语言程序设计-从C到C++(第二版)课件:运算符与表达式_第2页
高级语言程序设计-从C到C++(第二版)课件:运算符与表达式_第3页
高级语言程序设计-从C到C++(第二版)课件:运算符与表达式_第4页
高级语言程序设计-从C到C++(第二版)课件:运算符与表达式_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

3.1概述3.2算术运算符和算术表达式3.3赋值运算符和赋值表达式3.4自增与自减运算符及其表达式3.5关系运算符和关系表达式3.6逻辑运算符和逻辑表达式3.7逗号运算符及逗号表达式3.8隐式类型转换3.9强制类型转换3.1概述运算符(operator)就是一些特定的符号,用来表示对数据执行的特定操作,也称作操作符。C语言中的运算符,根据参与运算对象的多少,可分为单目运算符(或称作一元运算符)、双目运算符(或称作二元运算符)、三目运算符(或称作三元运算符);根据参与运算的对象的结合方向,可以分为从左向右和从右向左两类;根据实现运算的作用不同,可分为算术运算符、赋值运算符、逻辑运算符、关系运算符、条件运算符、逗号运算符、位操作运算符等等。本节将重点介绍一些基本而且常用的运算符,其他运算符在后续章节的学习中将陆续介绍。表达式(expression)最基本的形式就是一个数据,也称为操作数。操作数可以是任意类型的常量或变量。将操作数与运算符结合,可以构建一个新的表达式,继而使用多个运算符连接多个操作数形成更为复杂的表达式。C语言的表达式由运算符、常量、变量所组成。表达式的结尾不能加分号。当一个表达式由多个不同运算性质的操作符和多个不同数据类型的操作数构成时,选择不同的运算顺序可能会得出不同甚至错误的结果。因此,C语言通过规定运算符的“优先级”和“结合性”来保证运算结果的正确性和唯一性。在对表达式求值时,应按运算符优先级的高低次序执行。由于乘法运算符“*”比加法运算符“+”的优先级高,因此先计算子表达式“b*c”的结果,再用该结果与a相加。如果操作数两侧的运算符优先级相同,则按运算符的结合性处理。由于加法运算符“+”和减法运算符“-”同属算术运算符,且优先级相同,而算术运算符的结合性为“从左至右”,因此先计算子表达式“a+b”的结果,再用该结果与c相减。表达式的名称由表达式中优先级最低的运算符的名称决定。表达式在通过运算实现特定功能的同时,本身也将获得一个确定的值。表达式与语句的区别在于表达式的结尾不加分号,而语句必须以分号标识结束。由“表达式”加“分号”构成的语句,称为表达式语句。3.2算术运算符和算术表达式算术运算符为双目运算符,结合性为从左至右,包括 +、-、*、/、%。其中,运算符%称作模运算符或者求余运算符。算术运算符的优先级为:算术运算符是程序设计中使用最多的一类运算符,使用方法类似于数学上的四则运算,但有两个特点需要注意:(1)除法运算符“/”连接的两个操作数均为整型数据时,结果向零取整,不进行四舍五入,直接舍去小数部分。只有除法运算符“/”连接的两个操作数中有浮点型数据时,才会出现小数部分。(2)求余运算符“%”连接的两个操作数必须同为整型数据。除了运算符“%”只能连接整型数据外,其他所有算术运算符连接的操作数都可以是任意的数据类型,计算机以这些数据所代表的数值参与运算,算术表达式的运算结果为数值。3.3赋值运算符和赋值表达式赋值运算符为双目运算符,结合性为从右至左,包括赋值运算符(=)和复合赋值运算符(*=、/=、%=、+=、-=)。赋值运算符的优先级低于算术运算符。赋值运算是将运算符右边操作数的值赋给左边操作数。因此,赋值运算符左边的操作数必须是变量(有接收数据的存储单元),右边的操作数可以是常量、变量以及表达式,只要保证有确定的值就可以。整个赋值表达式的值就是执行赋值运算后左边操作数的值。使用复合运算符的目的是简化程序的书写,使程序更加精炼,同时也可以提高编译效率。当赋值运算符两侧的操作数类型不一致时,系统自动将右操作数的类型转换为左操作数(变量)的类型。发生数据类型转换时,需要注意转换前后的取值范围是否存在越界。3.4自增与自减运算符及其表达式自增与自减运算符为单目运算符,结合性为从右至左,包括 ++ 和 --。自增与自减运算符的优先级大于算术运算符。自增运算符“++”的作用是实现对操作数的值加1,自减运算符“--”的作用是实现对操作数的值减1。表达式的值即为操作数更新后的值。自增与自减运算符要求操作数的值是允许被改变的,即操作数必须是变量(更新后的值能够被存储)。例如:以变量i为例,自增与自减运算符有两种使用形式,即前缀运算符和后缀运算符。例如:i++ 与 ++i(或i-- 与 --i)在各自作为一个独立完整的表达式时,从结果上看并没有区别。例如:然而,当i++ 与 ++i(或i-- 与 --i)作为表达式或语句的一个组成部分时,区别就表现出来了。执行表达式 ++i,先将i值加1,再以更新后的i值作为该表达式的值参与下一步运算(即“先改变,后使用”);执行表达式i++,先以i的初始值作为该表达式的值参与下一步运算,再将i值加1(即“先使用,后改变”)。例如:自增、自减运算符常用于循环控制变量的递增或者递减,也可用于指针变量,使指针指向上一个或下一个地址。3.5关系运算符和关系表达式关系运算符为双目运算符,结合性为从左至右,包括 >、<、>=、<=、==、!=。其中,前四个表示的关系分别是大于、小于、大于或等于、小于或等于,其含义与在数学上使用的一样。而符号 == 表示等于,即判断两个操作数是否相等,这一点与在前面的章节中介绍的赋值运算符 = 完全不同,这也是初学者最容易犯错误的地方。符号 != 表示不等于,即判断或者比较两个参与运算的操作数是否不相等。关系指的是参与运算的两个操作数之间的关系。操作数可以是变量,也可以是常量或表达式,但是操作数必须有确定的值。关系运算符的优先级为:关系运算符的优先级低于算术运算符,高于赋值运算符,所以有下列表达式:几个关系运算符的优先级也不同,其中,运算符 >、<、>=、<= 的优先级相同,并且均高于运算符 == 与 != 的优先级,而运算符 == 与 != 的优先级相同。因此,有下列表达式:上述两个表达式分别表示:a>b==c,先将a与b进行比较,即判断a是否大于b,之后将两者比较的结果再与c进行是否相等的比较。a!=b>c,先将b与c进行比较,即判断b是否大于c,之后将两者比较的结果再与a进行是否不等的比较。关系表达式用于判断两个操作数之间的关系是否成立,如果关系成立,则表达式的结果为真(true),即表达式的值为1;如果关系不成立,则表达式的结果为假(false),即表达式的值为0。此外,还规定了表达式的值为int类型。简单地说,关系表达式的值不是整型数值1就是整型数值0。3.6逻辑运算符和逻辑表达式逻辑运算符包含一个单目运算符(!)和两个双目运算符(&&、||),用逻辑运算符将操作数连接起来就构成逻辑表达式。逻辑运算符的优先级为:逻辑表达式与关系表达式一样,常用于选择结构中的条件判断。逻辑运算符不关心操作数的值具体为多少,只需要知道操作数的值是否为0,将值为0的操作数转换为逻辑值“假”,将值为非0的操作数转换为逻辑值“真”。整个逻辑表达式的结果只有两个:1(真)或者0(假)。1.逻辑与运算符&&符号&&表示逻辑与,相当于中文的“且”。其优先级低于逻辑非( ! )而高于逻辑或( || ),结合性为从左至右。&&为双目运算符,左右两边操作数的值全部为真(值为非0)时,表达式的结果才为真(值为1),否则表达式的结果为假(值为0),即“全真才真”。2.逻辑或运算符 ||符号 || 表示逻辑或,相当于中文的“或”。其优先级是逻辑运算符中最低的,结合性为从左至右。|| 为双目运算符,左右两边操作数的值全部为假(值为0)时,表达式的结果才为假(值为0),否则表达式的结果为真(值为1),即“有真就真”。3.逻辑非运算符!符号 ! 表示逻辑非,相当于中文的“非”,为单目运算符,其优先级与同为单目运算符的自增自减运算符级别相同。不但高于同为逻辑运算符的 && 和 ||,还高于算术运算符、关系运算符以及赋值运算符。其结合性也与所有的单目运算符相同,为从右至左。运算符!的作用是对操作数的值取反。如果操作数的值为0 (假),则表达式的结果为1 (真);如果操作数的值为非0 (真),则表达式的结果为0 (假)。针对逻辑运算有相应的真值表,以操作数a、b为例,与逻辑运算符组合后的各种可能结果如表3-1所示。3.7逗号运算符及逗号表达式在C语言中,逗号有两种用途:一种是作为分隔符使用。比如,在下列语句中分隔多个同类型的变量或多个参数:一种是作为运算符使用。使用逗号运算符连接两个表达式形成一个逗号表达式,其一般形式为逗号运算符是所有运算符中优先级别最低的,结合性为从左至右。逗号运算符又称为“顺序求值运算符”,逗号表达式按照从左至右的顺序对运算符连接的各个表达式逐一求解,即先计算表达式1的值,再计算表达式2的值,依次计算,直到计算完表达式n的值,而整个逗号表达式的值即为表达式n的值。3.8隐式类型转换在对由运算符连接不同类型数据构成的表达式进行计算之前,首先要将运算符连接的不同类型数据转换为同一类型,这一类型转换过程由系统自动完成,称为“隐式类型转换”。隐式类型转换的规则遵循将“短”的数据类型转换为“长”的数据类型,精度低的向精度高的转换,取值范围小的向取值范围大的转换,以提高运算精度。其具体实现如图3-2所示。图中向右的箭头表示转换方向,即在发生数据类型转换时,char类型和short类型的数据都必须先转换为int类型的;int类型的数据必须转换为unsigned类型的;float类型的数据必须转换为double类型的。综上所述,如果short型数据与float型数据进行混合运算,应先将两个类型的数据一同转换为double类型的。3.9强制类型转换除了依靠系统自动实现隐式类型转换外,程序设计者还可以利用强制类型转换将一个表达式转换为程序所需要的数据类型。强制类型转换的一般形式为强制类型转换运算符为单目运算符,其优先级与结合性和同

温馨提示

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

评论

0/150

提交评论