C言語では、3つの論理演算子を提供します。
- モノ:! (論理否定)。
- 二元:&&(論理AND)、||(論理OR)。
これらの3つの論理演算子、論理AND &&、||、または最低の優先順位ロジックが続くロジックはありません!最高の優先順位、。代入演算子として算術、論理、の即ち優先順位:
ロジックはありません!>算数> &&論理と、論理的または||> =代入
値は論理式、すなわちブール(ブール値)、新しいC99型の論理値である、いくつかのコンパイラは、このタイプをサポートしていないかもしれません。
論理真と論理偽値に変換する論理値。一般的に、それが判断された場合、唯一の値ゼロ(偽)は、すべての非ゼロ値(真)論理真値として決定することができる論理偽値として決定され、そして一般的な前記格納する場合、論理1を表します。真の値は、0は論理値FALSEを表しています。
そして、論理演算子&&運用ルール:のみ2つのオペランドが真の論理的で、結果はtrueになります。他の例では、結果が偽でした。
ロジックまたは算術演算子||ルール:2つだけのオペランドは、結果が偽であり、論理的に偽です。残りの例では、結果が真です。
たとえば、定義文と
- int型= 3 、B = 5 。
あります。
- 非ゼロ以来!Aは:!、偽、0の値がtrueです。
- || B:及びbのでゼロ、それが真又は論理値1に評価し、真です。
- && B:ゼロのでB、真であるので、論理ANDの結果は、1の値が真です。
- !|| B && 2による論理非最高の優先順位を、最初と組み合わされ、&&と||より高い優先度よりも、等価||(B && 2)、すなわち、0 || 1が真である、値(A!)! 1。
論理AND &&、||論理または「ショート」機能です。
- そして、&&論理「ショート」:論理&&の左側のオペランドが論理偽であるとき、それは論理演算がfalseであるかどうかを決定するのに十分であり、それは、もはや右オペランドが行われているではありません。
- ||論理または「短絡」が左オペランドロジックまたは論理的に真||は、論理演算が真であるかどうかを決定するのに十分ではない、それが右のオペランドが行われなくなったとき。
例えば:
- INT = 1 、B = 2 、C 。
- C = || ++ B 。
- printf ("A =%のD、B =%のD、C =%d個の\ n " 、A、B 、C )。
非ゼロ値ので、それは本当であり、左のオペランドは、論理的に真または||、論理演算の結果が真である予測するのに十分である場合。したがって、「短い」の発生は、すなわち、右オペランド++ Bが実行されません。出力は次のようになります= 1、B = 2 、C = 1。
以下の分析プログラム、その動作の出力結果。
- 書式#include <stdio.hに>
- int型メイン(無効)
- {
- INT = 0 、B = 2 、C 。
- C != || ++ B && - 。
- printf ("A =%のD、B =%のD、C =%d個の\ n " 、A、B 、C )。
- リターン0 ;
- }
コード分析:
混合オペレータ発現C = || ++ B &&以外に含まA--ロジック!、ロジック、または||、&&論理演算++接頭辞、接尾辞演算- 、代入演算子= 6。優先順位の関係論理演算子、算術演算子、代入演算子は以下のとおりです。
ロジックはありません!>算数> &&論理と、論理的または||> =代入
式代入演算子は、最も低い優先順位、最終的な割当てを有するからです。
優先度のレベル、発現!|| ++ B && A--は(!A)に相当する||((++ B)&&(A--))、 および論理の左のオペランド又は||!式が真であるかどうかを決定するのに十分で、その後、真です。したがって、発生右||の数((++ B)&&(A--が全体の動作、すなわち、「短い」 )) はもはや行われます。
実行結果:
A = 0、B = 2、C = 1の。