-C言語の基本- 論理演算子で比較してみよう!

C言語

そもそも論理演算子とは?

こんにちは、リバティエンジニア[?]のたくやです。 現役エンジニアとしてアプリケーション開発やWeb制作、SEOやブログ運営をしています。

少し前に、「比較演算について」という記事でも少しだけ紹介したのですが、
今回は”論理演算子”について解説していこうと思います。

~はじめてのC言語~ 簡単!比較演算について
まずは条件分岐について比較演算子を調べてこのページに来ている方はもう御存知かと思いますが、念のためまずは条件分岐について簡単に説明しますね!C言語における条件分岐とは、ある条件によって違うことをやりたい場合などに便利です。例えば、引数として

条件文は何となくわかるのですが、
論理演算子は初めて聞く言葉でさっぱりわからないです。

条件文と論理演算子はつながりが深いので、一緒に見ていきましょうか。
サンプルコードも載せるので、ぜひ動かしながら試してみてください♪

 

 

論理演算子について

まずは論理演算子について説明していきます。
論理演算子とは、簡単に言うと複数の条件を一回で判定するときに使います。
例えば、「1つ目の条件」と「2つ目の条件」この両方を満たしている時に、
括弧内の処理を実行する。など、幅広い使い方ができます。

まずは、論理演算子にはどんな種類があるのかを見ていきましょう。

“&&”  論理積 [AND](アンド)

「論理積」とは、「複数の条件がすべて該当すれば」という条件を付けることができます。
まずはサンプルコードを見てみましょう。

int main ()
{
    int a = 0;
    int b = 5;
    int c = 20;
    int d = 30;
    // ここで条件分岐します
    if ( a == b && c != d)
    {
        printf("2つの条件は共に"正"です。");
    }
    else
    {
        printf("2つの条件はどちらか若しくは両方が"負"です。");
    }
}

このように、if文の中に「 “&&”  論理積 [AND]」を使って、複数の条件を評価することができます。
このコードの解説をすると、

aとbが等しくて、cとdは等しくない。この両方の条件を満たしている場合にのみ、
括弧内の処理である、「printf(“2つの条件は共に”正”です。”);」を実行します。

もし、どちらか一つでも条件を満たしていない場合はこのif文は不正となり実行されず、
else文の処理の「printf(“2つの条件はどちらか若しくは両方が”負”です。”);」
が実行されます。

” || ” 論理和 [OR](オア)

次の論理演算子は、「論理和」というものです。
これは「複数ある条件のうちいずれかが該当していれば」という条件を付けることができます。
こちらもまずはサンプルコードを見ていきましょう。

int main ()
{
    int a = 0;
    int b = 5;
    int c = 20;
    int d = 30;
    // ここで条件分岐します
    if ( a == b || c != d)
    {
        printf("2つの条件の内どちらかが"正"です。");
    }
    else
    {
        printf("2つの条件はどちらも該当しません。");
    }
}

このように、使い方は「論理積[AND]」と同じです。
if文の条件を決めるときに使い、複数ある条件のうちどれか一つでも該当するものがあれば、処理を実行することができます。
上記のサンプルコードを簡単に説明すると、

aとbが等しくて、cとdは等しくない。この条件のどちらか一つでも満たしている場合に、
括弧内の処理である、「printf(“2つの条件は共に”正”です。”);」を実行します。

もし、複数ある条件の内どれも満たしていない場合はこのif文は不正となり実行されず、
else文の処理の「printf(“2つの条件はどちらか若しくは両方が”負”です。”);」が実行されます。

” ! ” 否定 [NOT](ノット)

この論理演算子ですが、ここまで紹介してきた「論理積[AND]」や「論理和[OR]」とは、すこしだけ使い方が異なります。
まずはサンプルコードを見ていきましょう。

int main ()
{
    int a = 0;
    int b = 5;
    int c = 20;
    int d = 30;
    // ここで条件分岐します
    if ( !(a == b))
    {
        printf("aとbが一致していません");
    }
    else
    {
        printf("aとbが一致しています");
    }
}

このサンプルコードではif文内の条件に注目してください。
「 !(a == b)」というのはaがbと等しいという条件に”!”[NOT]が付いているので、
否定しています。つまり、aとbが等しいなら”負”として扱うため、
if文では「aとbが一致していなければ。」という条件になります。

このようにある条件を否定する際に” ! ” 否定 [NOT]を使います

演算子の優先順位について

次に演算子の優先順位について、つまり複数の演算子が混在している場合にどの演算子から実行されるのか。という事を見ていきます。

今回学習した、論理積[ && ]や論理和[ || ]は、関係演算子である”==”や” > “よりも優先順位は低いです。

int TestApp(int x)
{
    if (x > 3 && x < 20)
    {
        printf("xの値は3よりも大きく20よりも小さい値です。");
    }
}

この場合は論理積[ && ]よりも先に関係演算子” > “が先に評価されます。


次に、論理否定[ ! ]は関係演算子である「==」や「>」よりも優先順位が高いので次のように記述する時には注意が必要です。

int TestApp(int x)
{
    if (!x == 10)
    {
        /*----*/
    }
}

このようにしてしまうと、”x == 10″よりも先に” ! “が評価されてしまいます。

このような条件分岐時の優先順位でのミスを減らすには、
「 ( ) 」を使ってやるとわかりやすくなりミスが減るので、おすすめですよ♪

 if (!(x == 10))
このように記述するということですね!

そういうことです!
そうすることで、x==10が先に評価されるということが分かりやすいので、
修正する時なども理解しやすいですね♪

まとめ

今回は、論理演算子について解説しました。

論理積、論理和や否定をうまく使って、見やすくわかりやすいコードを心がけてみてください。
注意する点としては、演算子の中でも評価される優先順位が決まっているので、
“論理否定” , “関係演算子” , “論理積・論理和”という順番で評価されることはしっかり覚えておきましょう。

~はじめてのC言語~ 関数について
C言語における関数についてをまとめました。同じ意味でも書き方が異なったり、引数や戻り値がないパターンがあったりと、すこし混乱しそうになりますが、基本を押さえてしっかり理解して進みましょう。できるだけ簡単な言葉で専門用語も少なく初心者の方にもわかりやすいようにまとめてみました。


なにか質問があればお問い合わせフォームでお気軽にお問合せください。
可能な限りすぐにお返事します。
一流プログラマを目指して頑張りましょう!

コメント