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