运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。
运算符 |
解释 |
结合方式 |
() [] -> . |
括号(函数等),数组,两种结构成员访问 |
由左向右 |
! ~ ++ -- + - * & (类型) sizeof |
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 |
由右向左 |
* / % |
乘,除,取模 |
由左向右 |
+ - |
加,减 |
由左向右 |
<< >> |
左移,右移 |
由左向右 |
< <= >= > |
小于,小于等于,大于等于,大于 |
由左向右 |
== != |
等于,不等于 |
由左向右 |
& |
按位与 |
由左向右 |
^ |
按位异或 |
由左向右 |
| |
按位或 |
由左向右 |
&& |
逻辑与 |
由左向右 |
|| |
逻辑或 |
由左向右 |
? : |
条件 |
由右向左 |
= += -= *= /= &= ^= |= <<= >>= |
各种赋值 |
由右向左 |
, |
逗号(顺序) | 由左向右 |
由上表也可以看出一定规律,括号优先级最高,单目运算符(如!)高于又目、多目运算符
2、本人不是反对记优先级,但强烈建议不论什么表达式,均加括号,比如要实现
b = a * 2 + 1,可以由很多种方法实现,看以下两种方法实现
b = a * 2 + 1;
或者
b = a<<1 + 1; // 错
本来每二种方法也可以实现,但是结果是错误的,因为运算符+比移位操作<<的优先级要高,结果就成了 b = a<<2;
加括号就可以避免由于优先记记忆不准确造成错误
b = (a<<1) + 1; // OK
分享到:
相关推荐
C语言运算符优先级
C语言运算符优先级,同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
C语言运算符优先级和结合性表,全面介绍了C语言运算符的优先级和结合性。
C语言运算符优先级和口诀 便于在学习C语言中查阅哦。
C语言运算符优先级
C语言运算符优先级的详细列表,附特殊符号(转行、回车)的表达。
C语言运算符优先级 详细列表
C语言运算符优先级 在C语言中,运算符优先级定义了表达式中运算符的计算顺序。当一个表达式中有多个运算符时,高优先级的运算符会先被计算。如果运算符具有相同的优先级,那么运算符的结合性(从左到右或从右到左)...
C语言运算符优先级表.pdf
C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符优先级等级表详解C语言运算符...
运算符的优先级每种语言里应该都是差不多的,当然了有的语言中有一些特殊的运算符,比如在 C 语言中有 & 和 * 两个运算符,取地址 和 取内容两个运算符,这种运算符是和语言相关的,就区别对待吧。而对于算术运算、...
c语言运算符优先级
C语言运算符优先级
c语言运算符优先级
c语言运算符优先级总结,对运算级模糊的可以参考一下。这个文档是个wor的文档,查看较为方便!
C语言运算符优先级C语言运算符优先级