1級優先級 左結合
() 圓括號
[] 下標運算符
-> 指向結構體成員運算符
. 結構體成員運算符
2級優先級 右結合
! 邏輯非運算符
~ 按位取反運算符
++ 前綴增量運算符
-- 前綴增量運算符
+ 正號運算符
- 負號運算符
(類型)
類型轉換運算符
* 指針運算符
& 地址與運算符
sizeof 長度運算符
3級優
先級 左結合
* 乘法運算符
/ 除法運算符
% 取余運算符
4級優先級
左結合
+ 加法運算符
- 減法運算符
5級優先級 左結合
<<
左移運算符
>> 右移運算符
6級優先級 左結合
<、<=、&
gt;、>= 關系運算符
7級優先級 左結合
== 等于運算符
!= 不等于運算符
8級優先級 左結合
& 按位與運算符
9級優先級 左結合
^
按位異或運算符
10級優先級 左結合
| 按位或運算符
11級優先級 左結合
&& 邏輯與運算符
12級優先級 左結合
|| 邏輯或運算符
13級優
先級 右結合
? : 條件運算符
14級優先級 右結合
= += -= *= /=
%= &= ^= |= <<= >>= 全為賦值運算符
15級優先級 左結合
, 逗號運算符
優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。
所有的優先級中,只有三個優
先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。
具有最高優先級的其實并不算是真正的運算符,它
們算是一類特殊的操作。()是與函數相關,[]與數組相關,而->及.是取結構成員。
其次是單目運算符,所有的單目運算符具有相同的優
先級,因此在我認為的 真正的運算符中它們具有最高的優先級,又由于它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
另外在C語言里 沒有前置后置之分 因為++ --- 是右結合所以 右側優先運算 表現為 "后置優先級比較高" 的假象
前置和后置的區分是因為運算符重載而后加入C++的
接下來是算術運算符,*、/、%的優先級當然比+、-高了。
移位運算符緊隨其
后。
其次的關系運算符中,< <= > >=要比 == !=高一個級別,不大好理解。
所有的邏輯操作
符都具有不同的優先級(單目運算符出外,!和~)
邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。
跟在其后
的&&比||高。
接下來的是條件運算符,賦值運算符及逗號運算符。
在C語言中,只有4個運算符規定了運算方向,
它們是&&、| |、條件運算符及賦值運算符。
&&、|
|都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b;
&&運算符的左邊位0,則右邊表達式b就不再判斷。
在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中
的一個進行求值。
賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成為可能。
from:
http://wenwen.soso.com/z/q169038487.htmhttp://www.cppreference.com/wiki/operator_precedencehttp://blog.chinaunix.net/u1/34426/showart_423858.html
posted on 2010-03-16 12:10
chatler 閱讀(317)
評論(0) 編輯 收藏 引用 所屬分類:
C++_BASIS