C 语言运算符优先级表(由上至下,优先级依次递减)
运算符
结合性
() [] -> .
自左向右
! ~ ++ -- - (type) * & sizeof
自右向左
* / %
自左向右
+ -
自左向右
<< >>
自左向右
< <= > >=
自左向右
== !=
自左向右
&
自左向右
^
自左向右
|
自左向右
&&
自左向右
||
自左向右
?:
自右向左
Assignments
自右向左
,
自左向右
第一、像() [] -> .
之类的理所当然是最优先的,其实它们压根也不算什么运算符了 第二、
除了上面的四种运算符之外,接下来就是单目运算符,也就是! ~ ++ -- - (type) * &
sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如 i++
等。第三、跟着就是双目运算符了,也是 C 语言运算符优先级中最容易让人混淆的地方了。
其 实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高 ,
然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关
系运算符中,< <= > >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又
比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级
关系.
第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。第五、然后是赋
值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写
过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里,你就不