2010-10-18 回答
给你一个表
由上至下,优先级依次递减运算符
结合性
() [] -> .
自左向右
! ~ ++ -- - (type) * & sizeof
自右向左
/ % *
自左向右
+ -
自左向右
<< >>
自左向右
< <= > >=
自左向右
== !=
自左向右
&
自左向右
^
自左向右
|
自左向右
&&
自左向右
||
自左向右
?:
自右向左
Assignments
自右向左
,
自左向右
优先级最高者其实并不是真正意义上的运算符,包括:数组下标、函数调用( () )及各结构成员选择符
单目运算符的优先级紧随其后,在真正的运算符中,他们的运算优先级最高
所以如果p是一个函数指针,要调用p所指的函数,必须这样写:(*p)(),
如果写成*p(),编译器会解释成*(p())
优先级比单目运算符要低的,就是双目运算符,在双目运算符中,算数运算符的优先级最高,
移位运算符次之,关系运算符再次之,接着是逻辑运算符,赋值运算符,最后是条件运算符
其中重要的两点:
1. 任何一个逻辑运算符的优先级低于任何一个关系运算符
2. 移位运算符的优先级要比算数运算符低,但是比关系运算符低
但是,六个关系运算符的优先级并不相同
==和!=的优先级要低于其他关系运算符。
因此,如果我们要比较a与b的相对大小顺序是否和c与d的相对大小顺序一样,就可以这样写
a
这些优先顺序是由于历史原因形成的。