| 維度 | 關系表達式 | 邏輯表達式 |
|---|---|---|
| 構成元素 | 兩個算術表達式通過關系運算符(< > <= >= == !=)連接 | 關系表達式或邏輯量(變量/常量)通過邏輯運算符(&& || !)連接 |
| 運算結果 | 0(假)或 1(真) | 0(假)或 1(真) |
| 優先級 | 高於邏輯運算符 | 低於關系運算符 |
| 典型例子 | a > b, x == 10 | (a > b) && (c < d), !flag |
&&、||、! 組合成複雜條件。優先級由高到低:
1. 算術運算符 (+ - * / %)
2. 關系運算符 (< <= > >=)
3. 相等運算符 (== !=)
4. 邏輯與 (&&)
5. 邏輯或 (||)
6. 條件運算符 (?:)
7. 賦值運算符 (= += ...)
結合性:除單目運算符、條件運算符、賦值運算符為右結合外,其餘均為左結合。
int a=5, b=3, c=10;
/* 關系表達式 */
a > b // 1 (真)
c <= 5 // 0 (假)
/* 邏輯表達式 */
(a > b) && (c <= 5) // 1 && 0 → 0 (假)
(a > b) || (c <= 5) // 1 || 0 → 1 (真)
!(a > b) // !1 → 0 (假)
/* 短路求值演示 */
int x = 0;
(1 || (x = 5)) // 短路,x 保持 0
(0 && (x = 5)) // 短路,x 保持 0
(1 && (x = 5)) // 不短路,x 變為 5,表達式值 5 (真)
if ((a > 0) && (b < 100))。if (ptr != NULL && ptr->len > 0) 避免空指針解引用。關系表達式是邏輯表達式的「積木」,邏輯表達式通過邏輯運算符將多個判斷條件組合成複雜決策。清晰區分兩者層次、掌握優先級與短路規則,能寫出更安全、可讀性更強的 C 代碼。