C++运算符的优先与结合性.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C运算符的优先与结合性

c/c++运算符的优先级和结合性 内容导读: 遍历了15个级别之后,让我们再来总结一下。其中我们可以看出这样两个规律: 规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符; 规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算...   遍历了15个级别之后,让我们再来总结一下。其中我们可以看出这样两个规律:   规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符;   规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算符,位移运算符,关系运算符,位运算符,逻辑运算符,赋值运算符。   此外还有两特别的地方需要注意:   一、同为关系运算符,但==和!=的级别低于其它四个;   二、第2组与第13组的操作符是右结合的,其它的都为左结合;   通过分类我们大大减少了需要记忆的内容,遇到使用操作符的时候,我们只需想想它们是什么类型的运算符就可以确定它们之间的相对优先级,从而避免一些不必要的错误。   =========================================================================================   提起运算符的优先级,很多了解c++的过来人都会想:这有什么难的?不就是谁的优先级高就算谁么。确实如此,运算符的优先级不是一个大问题,但对于一个初学者来说,却经常容易在上面迷糊与犯错。而对于一个了解c++的人来说,我相信也会偶尔在上面摔倒,不信就继续往下读。   “优先级高的先运算”带来的困惑   c++中运算符的优先级有一张表,表里把运算符进行了分类,这张表是不需要死记硬背的,只要有个大致的轮廓就ok了。例如应该记住最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算),算术运算符的优先级高于关系运算符,象++和﹣﹣的优先级比前面几个都高,但最高的要属()了。知道这些后,你的脑海里一定有一条准则了:优先级高的先运算。那么下面看一个例子:   intx=1,y=0;   !xx+y++y;   上面的语句中出现了!、、+、++这四个运算符,那么问题来了,到底先算谁呢?   有一个姓蔡的同学站起来说,++运算符在这里面优先级最高,理所应当最先算++,既先计算++y,再算!x,再算x+y,最后把它们起来。按照蔡同学的思路,第二步的结果是0x+y1,由于是严格运算,有一个为0结果既为0,所以不需要计算x+y了,整个语句的结果是:假。按照上面蔡同学的说法,执行完后y的值应该是1了,这对不对呢?   一位姓高的同学站起来反驳道,我觉得应该先计算!x,如果值为假,则不需要计算下去,最后结果为假。如果值为真,再计算x+y,同理如果其值为真,再去计算++y,否则最后结果也为假。   蔡同学不服起来说,高同学你觉得++和!谁的优先级高呢?高同学答道,那当然是++高。蔡同学接着问,那为什么还要先计算!呢?高同学答不出来了。   是呀,为什么要先算!呢?   加括号确定优先级的方法   高同学说的是正确的,为什么呢?下面我给大家解释一下。当多个优先级不同的运算符在一起时,为了不混淆,可以先加上括号,这样就分出层次了,相同层次的考虑结合性问题,当确定下来先算那块时,再往这块里面深入。例如上面的例子,我们可以这样加上括号:从左向右看,由于!比优先级高,所以有(!x),又由于比+优先级低,所以有(x+y),而++优先级高于,所以(++y)。这样整个式子就变成了:(!x)(x+y)(++y),最外层的是两个运算,由于的结合性是从左至右,所以上式可看成:abc,先计算a,再计算b,最后算c。由于x=1,则!x就为假,后面的就不需要再算了,整个语句的值为假。执行完后,y的值没变,还是0。   所以碰到不清楚先算谁后算谁时,先加个括号看看,就明白了先后次序。下面做一个加括号的练习:给语句c=ab?a:b;加括号。此语句有三个运算符:=、、?:,应该怎样加括号呢?   第一种方案:c=((ab)?a:b);   第二种方案:c=(a(b?a:b));   第三种方案:(c=a)(b?a:b);   应该是那一种呢?按照运算符优先级的高低顺序,优先级高于=,所以不可能把(c=a)括起来。而优先级高于?:运算符。所以也不可能把(b?a:b)括起来。因此,第一种答案正确。   下面再看一个类似的例子:   inti=8,j=4,k;   k=ij?++i:++j;   猛然一看,有些人上来可能就要计算

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档