background image

语言运算符优先级表(由上至下,优先级依次递减)

运算符

结合性

() [] -> . 

 

自左向右

! ~ ++ -- - (type) * & sizeof 

 

自右向左

* / % 

 

自左向右

+ - 

 

自左向右

<< >> 

 

自左向右

< <= > >= 

 

自左向右

== != 

 

自左向右

 

自左向右

 

自左向右

 

自左向右

&& 

 

自左向右

|| 

 

自左向右

?: 

 

自右向左

Assignments 

 

自右向左

 

自左向右

第一、像() [] -> .

 

之类的理所当然是最优先的,其实它们压根也不算什么运算符了 第二、

除了上面的四种运算符之外,接下来就是单目运算符,也就是! ~ ++ -- - (type) * & 
sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是很容易理解的,比如 i++

 

等。第三、跟着就是双目运算符了,也是 C 语言运算符优先级中最容易让人混淆的地方了。

 

其 实也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算符优先级最高 ,
然后是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关
系运算符中,< <= > >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又
比或运算优先级来得高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级
关系. 

 

第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。第五、然后是赋

值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系,我想你一定写
过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里,你就不