- 1、本文档共101页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 运算符和表达式 概述 基本运算 其他运算 类型转换 左值和右值 表达式的求值顺序 表达式与语句 4.1.1 C语言运算符的种类 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)和自减(--)共七种运算符。 关系运算符:用于比较运算。包括大于()、小于()、等于(==)、大于等于(=)、小于等于(=)和不等于(!=)共六种运算符。 逻辑运算符:用于逻辑运算。包括与()、或(||)、非(!)三种。 位运算符:参与运算的量,按二进制位进行运算。包括位与()、位或(|)、位非(~)、位异或(^)、左移()、右移()共六种运算符。 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=、-=、*=、/=、%=)和复合位运算赋值(=、|=、^=、=、=)三类共11种运算符。 条件运算符:用于条件求值(?:)。 逗号运算符:用于把若干表达式组合成一个表达式(,)。 指针运算符:用于取内容(*)和取地址()两种运算。 求字节数运算符:用于计算数据类型所占的字节数(sizeof)。 特殊运算符:包括括号(),下标[],成员(-和.)和强制类型转换运算符等五种。 4.1.2 C语言运算符的特性 通常,人们理解的运算符,就是表示各种运算的符号。但在C语言中,除了控制语句以外,几乎所有的基本操作都作为运算符处理。所以,C语言运算符指明了一种操作,可以看作是操作符,但从广义上讲,它是一个具有返回值的函数。因为就其本质而言,一个函数就是实现某种功能,或者说是完成某种操作,它与函数名的表现形式无关。例如,为了使用方便,系统往往预定义一些简单的符号来表达操作,表达式y=a+b中,a+b返回其和赋给y,类似地,表达式a=b=1中,返回子表达式b=1的结果赋给a。由此可见,运算符“+”和“=”是带返回值的,且分别完成“加”和“赋值”操作。一个更一般的例子是大家熟知的表达式: count=printf(r1=%f,r2=%f\n,r1,r2); 当然printf是库函数名,它完成一种操作或者说是一种运算,从这个角度讲,它也是一种操作符或运算符,只是实现这种运算的方式与“+”和“=”运算不同罢了。 运算符的优先级指表达式求值时,按运算符的优先级由高到低的次序计算。如大家习惯的“先乘除后加减” , C语言运算符的运算优先级共分为15级。1级最高,15级最低。C语言运算符的优先级规则与数学中的规则是相同的,它是C语言能够以正确的次序计算表达式的准则。 C语言中运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如,算术运算符的结合性是自左至右,即先左后右。例如,表达式a-b+c,则b应先与减号“-”结合,先执行a-b运算,然后再执行+c的运算。这种自左至右的结合方向就称为“左结合性”,而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。例如,表达式a=b=1,由于赋值运算符“=”具有右结合性,所以应先计算子表达式b=1,即表达式a=b=1等价与a=(b=1)。读者在应用中应注意区别C语言运算符的结合性,以避免理解错误。 4.1.3 C语言表达式的特性 表达式是由常量、变量、函数和运算符组合起来的式子。它是最基本的计算描述手段,用于描述计算值的过程。C语言规定,一个表达式应是可求值的,不可求值的表达式被认为是一个错误。因此,对表达式的计算将返回一个具有确定类型的值。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。 表达式的计算分为两种,一种是有副作用的计算,一种是无副作用的计算。所谓副作用(side effect),是相对传统意义上的“表达式”来说的。传统表达式的计算过程,运算符不会令参与计算的变量本身的值发生改变。例如,对算术表达式: a*b+c 的计算不会改变a,b和c的值。但对于C语言中的赋值表达式: a=b+c 参与计算的变量a的值将发生改变,我们就说这个表达式是带有副作用的。 如果一个表达式在求值中不仅求出一个值,还改变了执行环境的状态,就说它带有副作用。对带有副作用的表达式,如何控制计算过程以获得预期的结果,对于一个C语言初学者来说,并不容易掌握。通常对计算过程的控制手段是优先级、结合性和括号。但对带有副作用的表达式求值时,运算对象的计算顺序也是非常重要的。这是因为C语言对运算对象的求值顺序“不予规定”,目的是允许编译器采用任何求值顺序,允许在表达式编译中做更多优化。因此,对于下面的表达式: (++x)*(x+1) 当x==0时,如果先计算++x,上式计算结果为2;如果先计算x+1,上式计算结果为1。可见,两个子表达式的不同计算顺序将导致计算结果的不确定性。在C
您可能关注的文档
最近下载
- 2024年邢台襄都事业单位笔试真题及答案.pdf VIP
- 延长中煤榆林能源化工公司504项目环境影响报告.pdf
- [白水湖春梦].萧丽红.文字版.pdf VIP
- 第六单元 大单元教学设计-2025-2026学年高一语文必修上册统编版.pdf VIP
- 合力叉车 电动仓储车维修手册.pdf
- 药品及医用耗材管理制度.docx VIP
- 2025年入党积极分子的思想汇报1500字【五】.docx VIP
- 计算机类本科毕业论文-基于FPGA的产品表面工业缺陷检测系统.docx VIP
- 临时医嘱单模板.pdf VIP
- 2025福建福州首邑产业投资集团有限公司(第一次)招聘18人笔试模拟试题及答案解析.docx VIP
文档评论(0)