| 優先序 | 結合性 | 運算子 | 說明 |
|---|---|---|---|
| 1 | 左→右 | () [] -> . | 函式呼叫、陣列下標、結構指標/成員存取 |
| 2 | 右→左 | ! ~ ++ -- - (type) * & sizeof | 邏輯非、位元非、遞增減、負號、型別轉換、指標解引用、取址、大小 |
| 3 | 左→右 | * / % | 乘、除、取餘 |
| 4 | 左→右 | + - | 加、減 |
| 5 | 左→右 | << >> | 左移、右移 |
| 6 | 左→右 | < <= > >= | 關係比較 |
| 7 | 左→右 | == != | 等於、不等於 |
| 8 | 左→右 | & | 位元 AND |
| 9 | 左→右 | ^ | 位元 XOR |
| 10 | 左→右 | | | 位元 OR |
| 11 | 左→右 | && | 邏輯 AND |
| 12 | 左→右 | || | 邏輯 OR |
| 13 | 右→左 | ?: | 條件運算子(三元) |
| 14 | 右→左 | = += -= *= /= %= >>= <<= &= ^= |= | 賦值及複合賦值 |
| 15 | 左→右 | , | 逗號運算子 |
a = b = c 等價 a = (b = c)sizeof、型別轉換、單目運算同層級,右結合。// 1. 位元 & 低於 ==
if (a & b == 0) // 實為 a & (b == 0) ❌
if ((a & b) == 0) // 正確 ✅
// 2. 移位優先於關係
if (a << 2 > b) // 實為 (a << 2) > b ✅ (移位優先序 5 > 關係 6)
// 3. 條件運算子右結合
a ? b : c ? d : e // 實為 a ? b : (c ? d : e) ✅
// 4. 逗號運算子最低
int x = (1, 2, 3); // x = 3,逗號運算子回傳最右值
複雜表達式務必加括號明確意圖,勿依賴記憶優先序,提升可讀性並避免移植風險(部分編譯器對位元/邏輯優先序實作不同)。