C 語言運算子超過 40 種,優先順序層級多達 15 級。初學者常靠死記硬背,寫代碼時仍須查表。資深工程師建議:「不確定時加括號」,但閱讀他人代碼時仍需快速判斷結合順序。一個好的口訣能將優先順序內化為肌肉記憶。
單目雙目三目問,算術移位關係親。
邏輯位與位異或,邏輯或後條件真。
賦值逗號最輕鬆,括號提升最高榮。
| 口訣片段 | 對應運算子類別 | 代表運算子 | 結合方向 |
|---|---|---|---|
| 單目 | 一元運算子 | ++ -- + - ! ~ (type) * & sizeof | 右→左 |
| 雙目 | 算術運算子 | * / % + - | 左→右 |
| 三目 | 條件運算子 | ? : | 右→左 |
| 移位 | 位移運算子 | << >> | 左→右 |
| 關係 | 關係運算子 | < <= > >= | 左→右 |
| 邏輯位與 | 位元 AND | & | 左→右 |
| 位異或 | 位元 XOR | ^ | 左→右 |
| 位或 | 位元 OR | | | 左→右 |
| 邏輯與 | 邏輯 AND | && | 左→右 |
| 邏輯或 | 邏輯 OR | || | 左→右 |
| 條件真 | 條件運算子(三目) | ? : | 右→左 |
| 賦值 | 賦值運算子 | = += -= *= /= %= &= ^= |= <<= >>= | 右→左 |
| 逗號 | 逗號運算子 | , | 左→右 |
| 括號提升 | 括號改變優先級 | ( ) | — |
a + b > c ? d : e 依口訣為 (a+b) > c ? d : e。& 優先級高於 ==,if (x & 1 == 0) 實為 if (x & (1==0)) → 永假,正確寫法 if ((x & 1) == 0)。最高 │ ( ) [ ] -> . ++ -- (後置) │ ++ -- + - ! ~ (type) * & sizeof (前置/一元) │ * / % │ + - │ << >> │ < <= > >= │ == != │ & │ ^ │ | │ && │ || │ ? : │ = += -= *= /= %= &= ^= |= <<= >>= │ , 最低
將金字塔列印貼在螢幕邊,初學期一個月即可內化。