下面按優先級從高到低的順序總結一下各種運算符,每一條所列的各運算符具有相同的優先 級,對於同一優先級的多個運算符按什么順序計算也有說明,雙目運算符就簡單地用“左結 合”或“右結合”來說明了。和指針有關的運算符* & ->也在這里列出來了,以后再詳細解釋。
1 、標識符、常量、字符串和用()括號套起來的表達式是組成表達式的最基本單元,在運算中做 操作數,優先級最高。
2、后綴運算符,包括數組取下標[]、函數調用()、結構體取成員.、指向結構體的指針取成員- >、后綴自增++、后綴自減--。如果一個操作數后面有多個后綴,按照離操作數從近到遠的順序 (也就是從左到右)依次運算,比如a.name++,先算a.name,再++,這里的.name應該看成a的 一個后綴,而不是把. 看成雙目運算符。
3、單目運算符,包括前綴自增++、前綴自減--、 sizeof、類型轉換()、取地址運算&、指針間接 尋址*、正號+、負號-、按位取反~、邏輯非! 。如果一個操作數前面有多個前綴,按照離操作數 從近到遠的順序(也就是從右到左)依次運算,比如!~a,先算~a,再求!。
4、乘*、除/、模%運算符。這三個運算符是左結合的。 5、加+、減-運算符。左結合。
6、移位運算符<<和>>。左結合。
7、關系運算符< > <= >=。左結合。
8、相等性運算符==和!=。左結合。
9、按位與&。左結合。
10、按位異或^。左結合。
11 、按位或|。左結合。
12、邏輯與&&。左結合。
13、邏輯或||。左結合。
14、條件運算符:?。在第 2 節 “if/else語句”講過Dangling-else問題,條件運算符也有類似的問 題。例如a ? b : c ? d : e是看成(a ? b : c) ? d : e還是a ? b : (c ? d : e) ? C語言規 定是后者。
15、賦值=和各種復合賦值(*= /= %= += -= <<= >>= &= ^= |=)。右結合。
16、逗號運算符。左結合。