资源描述:
《c语言运算符优先级表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言运算符优先级表(由上至下,优先级依次递减)运算符结合性()[]->.自左向右!~++---(type)*&sizeof自右向左*/%自左向右+-自左向右<<>>自左向右<<=>>=自左向右==!=自左向右&自左向右^自左向右
2、自左向右&&自左向右
3、
4、自左向右?:自右向左Assignments自右向左,自左向右第一、像()[]->.之类的理所当然是最优先的,其实它们压根也不算什么运算符了第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是!~++---(type)*&sizeof了。记住它们
5、的顺序可是自右向左啊!其实结合实例是很容易理解的,比如i++等。第三、跟着就是双目运算符了,也是C语言运算符优先级中最容易让人混淆的地方了。其实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高,然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算符中,<<=>>=比==!=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与
6、
7、的优先级关系.第四、在双目操作符之后,就是三目操作符了,没有
8、什么好说的了。第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写过这样的语句(如果没有,请你记住!):max=(a>b)?a:b;,从这个语句里,你就不难记住赋值运算符为什么比三目运算符的优先级低了!第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的意思的),自然优先级最低了,我想这个应该不是很容易混淆的。总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值运算符->逗号运算符特别在双目运算符中,按运算符
9、优先级从高到低:算术运算符->移位运算符->关系运算符(其中==和!=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻辑与-〉逻辑或)! 运算符的结合性指同一优先级的运算符在表达式中操作的组织方向,即:当一个运算对象两侧运算符的优先级别相同时,运算对象与运算符的结合顺序,C语言规定了各种运算符的结合方向(结合性)。大多数运算符结合方向是“自左至右”,即:先左后右,例如a-b+c,b两侧有-和+两种运算符的优先级相同,按先左后右结合方向,b先与减号结合,执行a-b的运算,再执行加c的运算。
10、除了自左至右的结合性外,C语言有三类运算符参与运算的结合方向是从右至左。即:单目运算符,条件运算符,以及赋值运算符。关于结合性的概念在其他高级语言中是没有的,这是C语言的特点之一。 ++a或a++和--a或a--分别称为前置加或后置加运算和前置减或后置减运算,都是单目运算符。值得注意的是,前置、后置运算只能用于变量,不能用于常量和表达式,且结合方向是从右至左。如当i=6时,求-i++的值和i的值。由于“-”(负号)“++”为同一个优先级,故应理解为-(i++),又因是后置加,所以先有-i++的值为-6
11、,然后i增值1为7,即i=7。例1main(){inta=3,b=5,c;c=a*b+++b;printf(“c=%d”,c);}要得出c的值,首先要搞清+++的含义。++运算符的结合方向是自右向左的,如果将表达式理解为:c=a*b+(++b);实际上C编译器将表达式处理为:c=(a*b++)+b,因为C编译器总是从左至右尽可能多地将若干个字符组成一个运算符,如i+++j等价于(i++)+j。接下来是解决a*b++的问题,因为++运算符的运算对象只能是整型变量而不能是表达式或常数,所以a*b++显然是a
12、*(b++)而非(a*b)++,因此整个表达式就是c=(a*(b++))+b,结果为c=20。例2main(){inti=1,j;j=i+++i+++i++;printf(“i=%d,j=%d”,i,j);}例3main(){inti=1,m;m=(++i)+(++i)+(++i);printf(“i=%d,m=%d”,i,m);}j和m的值均由表达式求得,并且这两个表达式均由自增运算符、加法运算符和赋值运算符组成。那么,它们的值到底为多少呢?j=1+1+1=3还是j=1+2+3=6?m=2+3
13、+4=9还是m=4+4+4=12?上机运行结果为:i=4,j=3,m=10(VC6.0)。分析:运算符“++”,“+”和“=”的优先级是递减的,在计算时,先进行自增运算,再进行加法运算,最后是赋值运算。而自增运算又根据“i++”和“++i”的不同定义得到不同的值。i+++i+++i++先将i原值(1)取出,作为表达式中i的值进行加法运算得到3,然后再实现三次自加;(++i)+(++i)+(++i)的计算与编译器有关。例4设a=6,求赋值表达