K++ && n++ > 2 結合性分析++ (後綴)> (關係運算符)&& (邏輯與)但注意:**邏輯與 && 優先級高於關係運算符 >** 是錯誤的記憶。正確順序為:
後綴 ++ > 關係運算符 (>, <, >=, <=) > 邏輯與 (&&) > 邏輯或 (||)
表達式:K++ && n++ > 2
K++ 先結合(後綴 ++ 最高) → 左操作數。n++ > 2 再結合(關係運算符 > 邏輯與) → 右操作數:(n++) > 2。&& 結合:(K++) && ((n++) > 2)。K 原值為 0 → K++ 為 0 (假) → **短路**,n++ > 2 **不執行**,n 不自增。K 原值非 0 → K++ 為真 → 繼續求值右側:n++ 取原值比較 >2,然後 n 自增。#include <stdio.h>
int main() {
int K = 0, n = 5;
int res = K++ && n++ > 2;
printf("K=%d, n=%d, res=%d\n", K, n, res); // K=1, n=5, res=0 (短路)
K = 1; n = 5;
res = K++ && n++ > 2;
printf("K=%d, n=%d, res=%d\n", K, n, res); // K=2, n=6, res=1 (n變6)
return 0;
}
| 優先級 | 運算符 | 結合方向 |
|---|---|---|
| 1 (最高) | () [] -> . ++(後) --(後) | 左→右 |
| 2 | ++(前) --(前) + - ! ~ * & sizeof (type) | 右→左 |
| 3 | * / % | 左→右 |
| 4 | + - | 左→右 |
| 5 | << >> | 左→右 |
| 6 | < > <= >= | 左→右 |
| 7 | == != | 左→右 |
| 8 | & | 左→右 |
| 9 | ^ | 左→右 |
| 10 | | | 左→右 |
| 11 | && | 左→右 |
| 12 | || | 左→右 |
| 13 | ?: | 右→左 |
| 14 | = += -= *= /= %= &= ^= |= <<= >>= | 右→左 |
| 15 (最低) | , | 左→右 |
**口訣**:單目 > 算術 > 移位 > 關係 > 相等 > 位與 > 位異或 > 位或 > 邏輯與 > 邏輯或 > 條件 > 賦值 > 逗號。不確定時**加括號**,可讀性與安全性雙贏。