Share via


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 演算の 1 つ目のオペランドが 0 となる場合、2 つ目のオペランドは評価されません。
|| 論理 OR 演算子は、そのオペランドに対して包括 OR 演算を実行します。 両方のオペランドの値が 0 の場合、結果は 0 です。 どちらかのオペランドの値が 0 以外の場合、結果は 1 になります。 論理 OR 演算の 1 つ目のオペランドにゼロ以外の値が含まれる場合、2 つ目のオペランドは評価されません。

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

使用例

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

int w, x, y, z;

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

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

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

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

関連項目