語法書 / AA 競程語法書 上冊 / 附錄 / C. 運算子優先順序速查表

C. 運算子優先順序速查表

優先順序從高到低排列。同優先順序的運算子按結合律(從左至右或從右至左)評估。

優先級 運算子 說明 結合律 範例
1 () 括號(最高優先) 從左至右 (a + b) * c
2 ++ (後置)、-- (後置) 後置自增/自減 從左至右 i++
3 ++ (前置)、-- (前置) 前置自增/自減 從右至左 ++i
3 !- (單元) 邏輯非、負號 從右至左 !flag-x
4 */% 乘、除、模 從左至右 a * b / c % d
5 +- 加、減 從左至右 a + b - c
6 <<=>>= 比較運算子 從左至右 a < b < c (注意:連寫有陷阱)
7 ==!= 相等、不相等 從左至右 a == b
8 && 邏輯且 從左至右 a && b && c
9 || 邏輯或 從左至右 a || b || c
10 =+=-=*=/=%= 指派運算子 從右至左 a = b = c

常見的優先級陷阱:

  1. && 優先於 \|\|

    • a \|\| b && c 被解讀為 a \|\| (b && c)
    • ✓ 要表達 (a \|\| b) && c 需加括號
  2. 比較運算子不能連寫

    • if (a < b < c) 等於 if ((a < b) < c) = if (1 < c)if (0 < c)(取決於 a < b
    • if (a < b && b < c)
  3. 位移運算子優先於算術運算子

    • 1 << n + 1 被解讀為 1 << (n + 1)
    • (1 << n) + 1
  4. +- 同優先級,從左至右結合

    • a - b + c = (a - b) + c
    • a + b - c = (a + b) - c