邏輯運算子會執行邏輯 AND (&&
) 與邏輯 OR (||
) 運算。
語法
logical-AND-expression
:
inclusive-OR-expression
logical-AND-expression
&&
inclusive-OR-expression
logical-OR-expression
:
logical-AND-expression
logical-OR-expression
||
logical-AND-expression
備註
邏輯運算子不會執行一般算術轉換。 它們會以等價於 0 的方式評估每個運算元。 邏輯運算的結果是 0 或 1。 結果的類型是 int
。
C 邏輯運算子描述如下:
運算子 | 描述 |
---|---|
&& |
若兩個運算元都有非零值,則邏輯 AND 運算子會產生值 1。 若任一運算元等於 0,則結果是 0。 若邏輯 AND 運算的第一個運算元等於 0,則不會評估第二個運算元。 |
|| |
邏輯 OR 運算子會在其運算元上執行包含 OR 運算。 若兩個運算元都有 0 值,則結果是 0。 若任一運算元有非零值,則結果是 1。 若邏輯 OR 運算的第一個運算元有非零值,則不會評估第二個運算元。 |
邏輯 AND 與邏輯 OR 運算式的運算元是從左到右評估。 若第一個運算元的值就足以決定運算結果,則不會評估第二個運算元。 這種效應稱為「最少運算」求值。 運算式中第一個運算元後面有一個序列點。 如需詳細資訊,請參閱序列點。
範例
下列範例說明邏輯運算子:
int w, x, y, z;
if ( x < y && y < z )
printf( "x is less than z\n" );
在此範例中,若 x
小於 y
且 y
小於 z
,則會呼叫 printf
函式以列印訊息。 若 x
大於 y
,則不會評估第二個運算元 (y < z
),而且不會列印任何內容。 這是撰寫邏輯比較時必須考慮的另一種「最少運算」求值的情況。 否則,如果程式碼依賴計算第二個運算元的副作用,則可能會導致問題。
printf( "%d" , (x == w || x == y || x == z) );
在此範例中,如果 x
等於 w
、y
或 z
,則 printf
函式的第二個引數判斷值為 true,並且列印值 1。 否則,它的判斷值為 false,並且印出值 0。 只要其中一項條件的判斷值為 true,求值就會停止。