c++_运算符的优先级和结合性.doc

上传人:s9****2 文档编号:552733186 上传时间:2022-09-04 格式:DOC 页数:9 大小:75.50KB
返回 下载 相关 举报
c++_运算符的优先级和结合性.doc_第1页
第1页 / 共9页
c++_运算符的优先级和结合性.doc_第2页
第2页 / 共9页
c++_运算符的优先级和结合性.doc_第3页
第3页 / 共9页
c++_运算符的优先级和结合性.doc_第4页
第4页 / 共9页
c++_运算符的优先级和结合性.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c++_运算符的优先级和结合性.doc》由会员分享,可在线阅读,更多相关《c++_运算符的优先级和结合性.doc(9页珍藏版)》请在金锄头文库上搜索。

1、c/c+ 运算符的优先级和结合性ZZ 2010-05-18 15:29PrecedenceOperatorDescriptionExampleAssociativity1()-.:+-Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement(a + b) / 4;array4 = 2;ptr-age = 34;obj.age = 34;Class:age = 2;for( i = 0; i 0;

2、 i- ) .left to right2!+-+*&(type)sizeofLogical negationBitwise complementPre-incrementPre-decrementUnary minusUnary plusDereferenceAddress ofCast to a given typeReturn size in bytesif( !done ) .flags = flags;for( i = 0; i 0; -i ) .int i = -1;int i = +1;data = *ptr;address = &obj;int i = (int) floatN

3、um;int size = sizeof(floatNum);right to left3-*.*Member pointer selectorMember pointer selectorptr-*var = 24;obj.*var = 24;left to right4*/%MultiplicationDivisionModulusint i = 2 * 4;float f = 10 / 3;int rem = 4 % 3;left to right5+-AdditionSubtractionint i = 2 + 3;int i = 5 - 1;left to right6Bitwise

4、 shift leftBitwise shift rightint flags = 33 1;left to right7=Comparison less-thanComparison less-than-or-equal-toComparison greater-thanComparison geater-than-or-equal-toif( i 42 ) .if( i 42 ) .if( i = 42 ) .left to right8=!=Comparison equal-toComparison not-equal-toif( i = 42 ) .if( i != 42 ) .lef

5、t to right9&Bitwise ANDflags = flags & 42;left to right10Bitwise exclusive ORflags = flags 42;left to right11|Bitwise inclusive (normal) ORflags = flags | 42;left to right12&Logical ANDif( conditionA & conditionB ) .left to right13|Logical ORif( conditionA | conditionB ) .left to right14? :Ternary c

6、onditional (if-then-else)int i = (a b) ? a : b;right to left15=+=-=*=/=%=&=|=Assignment operatorIncrement and assignDecrement and assignMultiply and assignDivide and assignModulo and assignBitwise AND and assignBitwise exclusive OR and assignBitwise inclusive (normal) OR and assignBitwise shift left

7、 and assignBitwise shift right and assignint a = b;a += 3;b -= 4;a *= 5;a /= 2;a %= 3;flags &= new_flags;flags = new_flags;flags |= new_flags;flags = 2;right to left16,Sequential evaluation operatorfor( i = 0, j = 0; i , +, -其中的自增(+)和自减()都是后缀运算符。2. 第二组的成员是剩下来所有的一元运算符,它们分别是:+, -, +, -, , !, *, &, (ty

8、pe), sizeof其中的+于都是前缀运算符。另外这一组的运算符都是右结合的。3. 一元运算符之后就剩下二元运算符了,而二元运算符中优先级中最高的就是算术运算符这一类,所以第三组是:*, /, %4. 可以由第3组推断得出第四组是: +, -5. 级别次于算术运算符的是位移运算符,所以这一组的成员是:6. 接下来这一类就是关系运算符了,第6组的成员有:, =7. 虽然都是关系运算符,但是=, !=优先级要低一些,这样我没就可以写出诸如:a b这样的判别式。8. 次于关系运算符的是二元的位运算符,一共有三个,把它们分为三个组,这一组是:&9. 然后是10.最后是|11.接着就是逻辑运算符这一类

9、了,只有两个,分成两组,这组是:&12.然后|13.二元的运算符之后就好似三元运算符了,C语言中只有一个:?:14.级别倒数第二高的是那些赋值运算符了,有很多:=, +=, -=, *=, /=, =, %=, &=,|=, =15.最后是优先级最低的运算符:,遍历了15个级别之后,让我们再来总结一下。其中我们可以看出这样两个规律:规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符;规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算符,位移运算符,关系运算符,位运算符,逻辑运算符,赋值运算符。此外还有两特别的地方需要注意:一、同

10、为关系运算符,但=和!=的级别低于其它四个;二、第2组与第13组的操作符是右结合的,其它的都为左结合;通过分类我们大大减少了需要记忆的内容,遇到使用操作符的时候,我们只需想想它们是什么类型的运算符就可以确定它们之间的相对优先级,从而避免一些不必要的错误。=提起运算符的优先级,很多了解C+的过来人都会想:这有什么难的?不就是谁的优先级高就算谁么。确实如此,运算符的优先级不是一个大问题,但对于一个初学者来说,却经常容易在上面迷糊与犯错。而对于一个了解C+的人来说,我相信也会偶尔在上面摔倒,不信就继续往下读。“优先级高的先运算”带来的困惑C+中运算符的优先级有一张表,表里把运算符进行了分类,这张表是

11、不需要死记硬背的,只要有个大致的轮廓就OK了。例如应该记住最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。而关系运算符的优先级高于逻辑运算符(不包括逻辑非运算),算术运算符的优先级高于关系运算符,象+和的优先级比前面几个都高,但最高的要属()了。知道这些后,你的脑海里一定有一条准则了:优先级高的先运算。那么下面看一个例子:int x=1,y=0;!x&x+y&+y;上面的语句中出现了!、& 、+、+这四个运算符,那么问题来了,到底先算谁呢?有一个姓蔡的同学站起来说,+运算符在这里面优先级最高,理所应当最先算+,既先计算+y,再算!x,再算x+y,最后把它们&起来。按照蔡同学的思路

12、,第二步的结果是0&x+y&1,由于&是严格运算,有一个为0结果既为0,所以不需要计算x+y了,整个语句的结果是:假。按照上面蔡同学的说法,执行完后y的值应该是1了,这对不对呢?一位姓高的同学站起来反驳道,我觉得应该先计算!x,如果值为假,则不需要计算下去,最后结果为假。如果值为真,再计算x+y,同理如果其值为真,再去计算+y,否则最后结果也为假。蔡同学不服起来说,高同学你觉得+和!谁的优先级高呢?高同学答道,那当然是+高。蔡同学接着问,那为什么还要先计算!呢?高同学答不出来了。是呀,为什么要先算!呢?加括号确定优先级的方法高同学说的是正确的,为什么呢?下面我给大家解释一下。当多个优先级不同的运算符在一起时,为了不混淆,可以先加上括号,这样就分出层次了,相同层次的考虑结合性问题,当确定下来先算那块时,再往这块里面深入。例如上面的例子,我们可以这样加上括号:从左向右看,由于!比&优先级高,所以有(!x),又由于&比+优先级低,所以有(x+y),而+优先级高于&,所以(+y)。这样整个式子就变成了:(!x)&(x+y)&(+y),最外层的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号