在C語言程式設計中,邏輯運算是控制程式流程、實現複雜決策的核心基礎。本文將系統講解C語言的三大邏輯運算符、優先級規則、求值機制以及邏輯表達式的實戰應用,幫助您建立扎實的邏輯運算思維。
C語言提供三種基本邏輯運算符,分別對應邏輯學中的「與、或、非」三種基本運算:
理解優先級是正確寫出複雜邏輯表達式的關鍵。優先級關係如下(由高到低):

根據優先級規則,以下表達式等價關係成立:
a>b && c>d 等價於 (a>b)&&(c>d)!b==c||d<a 等價於 ((!b)==c)||(d<a)a+b>c&&x+y<b 等價於 ((a+b)>c)&&((x+y)<b)C語言中邏輯運算結果只有兩種值:真(1)和假(0)。
規則:只有當兩個運算元都為真時,結果才為真,否則為假。
5 > 0 && 4 > 2 // 兩者皆真,結果為 1 (真)
5 > 0 && 4 < 2 // 後者為假,結果為 0 (假)
規則:只要有一個運算元為真,結果即為真;兩者皆假時才為假。
5 > 0 || 5 > 8 // 前者為真,結果為 1 (真)
5 < 0 || 5 > 8 // 兩者皆假,結果為 0 (假)
規則:真變假,假變真。
!(5 > 0) // 5>0 為真,取反後為假 (0)
!(5 < 0) // 5<0 為假,取反後為真 (1)
這是C語言邏輯判斷的核心機制:
這導致以下有趣現象:
5 && 3 // 兩者皆非 0,視為真,結果為 1
5 || 0 // 5 非 0 為真,結果為 1
0 && 100 // 0 為假,短路求值,結果為 0
邏輯表達式一般形式:表達式 邏輯運算符 表達式
由於 && 和 || 具有左結合性,(a&&b)&&c 可簡寫為 a&&b&&c。
C語言採用短路求值策略,這對效能和副作用控制至關重要:
&&:左側為假時,不再計算右側||:左側為真時,不再計算右側
- #include <stdio.h>
- int main(void){
- char c='k';
- int i=1,j=2,k=3;
- float x=3e+5,y=0.85;
- printf( "%d,%d\n", !x*!y, !!!x );
- printf( "%d,%d\n", x||i&&j-3, i<j&&x<y );
- printf( "%d,%d\n", i==5&&c&&(j=8), x+y||i+j+k );
- return 0;
- }
| 表達式 | 計算過程 | 結果 |
|---|---|---|
!x*!y | x=3e+5(非0)→!x=0;y=0.85(非0)→!y=0;0*0=0 | 0 |
!!!x | x非0→!x=0→!!x=1→!!!x=0 | 0 |
x||i&&j-3 | x非0為真,短路求值,不算右側 | 1 |
i<j&&x<y | i<j 為真(1);x<y 為假(0);1&&0=0 | 0 |
i==5&&c&&(j=8) | i==5 為假(0),短路,後續不執行,j 不會變成 8 | 0 |
x+y||i+j+k | x+y 非 0 為真,短路求值 | 1 |
// 錯誤
if (a & b) // 位運算,不會短路
// 正確
if (a && b) // 邏輯運算,支援短路
// 危險:永遠為真(假設 y 非 0)
if (x = y)
// 正確
if (x == y)
// j 永遠不會變成 8,因為 i==5 為假
i==5 && c && (j=8)
掌握 C 語言邏輯運算符的三大核心要素——運算規則、優先級層級、短路求值機制,是編寫高效、正確條件判斷程式碼的基石。建議多實作複雜邏輯表達式,體會短路求值在實際開發中的威力與陷阱。