2級優先級:右結合 !邏輯非運算符 ~按位取反運算符 ++自增運算符 --自減運算符 -負號運算符
(類型)類型轉換運算符 *指針運算符 &地址與運算符 sizeof長度運算符
3級優先級:左結合 *乘法運算符 /除法運算符 %取餘運算符
4級優先級:左結合 + -
5級優先級:左結合 << 左移運算符 >>右移運算符
6級優先級 左結合 <、<=、>、>= 關係運算符
7級優先級 左結合 == 等於運算符 != 不等於運算符
8級優先級 左結合 & 按位與運算符
9級優先級 左結合 ^ 按位異或運算符
10級優先級 左結合 | 按位或運算符
11級優先級 左結合 && 邏輯與運算符
12級優先級 左結合 || 邏輯或運算符
13級優先級 右結合 ? : 條件運算符
14級優先級 右結合 = += -= *= /= %= &= ^= |= <<= >>= 全爲賦值運算符
15級優先級 左結合 逗號運算符
優先級從上到下依次遞減,最上面具有最高的優先級,逗號操作符具有最低的優先級。
所有的優先級中,只有三個優先級是從右至左結合的,它們是單目運算符、條件運算符、賦值運算符。其它的都是從左至右結合。
具有最高優先級的其實並不算是真正的運算符,它們算是一類特殊的操作。()是與函數相關,[]與數組相關,而->及.是取結構成員。
其次是單目運算符,所有的單目運算符具有相同的優先級,因此在我認爲的 真正的運算符中它們具有最高的優先級,又由於它們都是從右至左結合的,因此*p++與*(p++)等效是毫無疑問的。
接下來是算術運算符,*、/、%的優先級當然比+、-高了。
移位運算符緊隨其後。
其次的關係運算符中,< <= > >=要比 == !=高一個級別,不大好理解。
所有的邏輯操作符都具有不同的優先級(單目運算符出外,!和~)
邏輯位操作符的"與"比"或"高,而"異或"則在它們之間。
跟在其後的&&比||高。
接下來的是條件運算符,賦值運算符及逗號運算符。
在C語言中,只有4個運算符規定了運算方向,它們是&&、| |、條件運算符及賦值運算符。
&&、| |都是先計算左邊表達式的值,當左邊表達式的值能確定整個表達式的值時,就不再計算右邊表達式的值。如 a = 0 && b; &&運算符的左邊位0,則右邊表達式b就不再判斷。
在條件運算符中。如a?b:c;先判斷a的值,再根據a的值對b或c之中的一個進行求值。
賦值表達式則規定先對右邊的表達式求值,因此使 a = b = c = 6;成爲可能。
C++運算符優先級