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