C 論理演算子

論理演算子は、論理 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 論理演算子を次に示します。

オペレーター 説明
&& 両方のオペランドに 0 以外の値がある場合、論理 AND 演算子は値 1 を生成します。 いずれかのオペランドが 0 の場合、結果は 0 になります。 論理 AND 演算の最初のオペランドが 0 の場合、2 番目のオペランドは評価されません。
|| 論理 OR 演算子は、オペランドに対して包括 OR 演算を実行します。 両方のオペランドの値が 0 の場合、結果は 0 になります。 いずれかのオペランドに 0 以外の値がある場合、結果は 1 になります。 論理 OR 演算の最初のオペランドに 0 以外の値がある場合、2 番目のオペランドは評価されません。

論理 AND 式と論理 OR 式のオペランドは、左から右に評価されます。 最初のオペランドの値が演算の結果を決定するのに十分な場合、2 番目のオペランドは評価されません。 この効果は、"短絡" 評価と呼ばれます。 式の最初のオペランドの後にシーケンス ポイントがあります。 詳細については、「 シーケンス ポイント」を参照してください。

例示

論理演算子の例を次に示します。

int w, x, y, z;

if ( x < y && y < z )
    printf( "x is less than z\n" );

この例では、xy未満で、yz未満の場合にメッセージを出力するために、printf関数が呼び出されます。 xyより大きい場合、2 番目のオペランド (y < z) は評価されず、何も出力されません。 これは、論理比較を記述するときに考慮する必要がある短絡評価のもう 1 つのケースです。 そうしないと、コードが 2 番目のオペランドを評価する副作用に依存している場合に問題が発生する可能性があります。

printf( "%d" , (x == w || x == y || x == z) );

この例では、 xwy、または zのいずれかに等しい場合、 printf 関数の 2 番目の引数は true に評価され、値 1 が出力されます。 それ以外の場合は false に評価され、値 0 が出力されます。 いずれかの条件が true に評価されるとすぐに、評価は停止します。

こちらも参照ください