C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++の論理演算子(||・&&・!)の基本と使い方を徹底解説

論理演算子の概念はとてもシンプルです。プログラムが複数の条件に基づいて判断を下せるようにするための仕組みです。各オペランドは「true または false に評価できる条件」として扱われ、その評価結果をもとに、「op1 演算子 op2」や「!op1」といった式全体の値が決まります。

C++には主に3種類の論理演算子があり、それぞれ以下のような特徴を持っています。

論理OR演算子(||)

論理OR演算子(||)は、オペランドのどちらか一方、あるいは両方が true であればブール値 true を返し、それ以外の場合は false を返します。

  • オペランドは評価前に暗黙的に bool 型へ変換され、結果も bool 型になります。
  • 左から右への結合規則(left-to-right associativity)を持ちます。
  • オペランド同士は同じ型である必要はありませんが、整数型またはポインタ型である必要があります。
  • 実際には、関係式や等価式がオペランドとして使われるのが一般的です。

まず最初のオペランドが完全に評価され、その副作用がすべて完了した後で、論理OR式の残りの評価が続行されます。2番目のオペランドは、最初のオペランドが false(0)と評価された場合にのみ評価されます。この仕組みにより、論理OR式が true になることが確定した時点で、2番目のオペランドの無駄な評価を省くことができます。これは「短絡評価(ショートサーキット評価)」と呼ばれる重要な特性です。

論理AND演算子(&&)

論理AND演算子(&&)は、両方のオペランドが true の場合にのみブール値 true を返し、それ以外の場合は false を返します。

  • オペランドは評価前に暗黙的に bool 型へ変換され、結果も bool 型になります。
  • 左から右への結合規則を持ちます。
  • オペランド同士は同じ型である必要はありませんが、整数型またはポインタ型である必要があります。
  • こちらも関係式や等価式がオペランドとしてよく使われます。

まず最初のオペランドが完全に評価され、その副作用がすべて完了した後で、論理AND式の残りの評価が続行されます。2番目のオペランドは、最初のオペランドが true(0以外)と評価された場合にのみ評価されます。つまり、論理AND式が false になると確定した時点で、2番目のオペランドの評価はスキップされます。

論理否定演算子(!)

論理否定演算子(!)は、オペランドの真偽を反転させる単項演算子です。

  • オペランドは算術型またはポインタ型(あるいはそれらに評価される式)である必要があります。
  • オペランドは暗黙的に bool 型へ変換されます。
  • 変換後のオペランドが false なら結果は true、true なら結果は false になります。
  • 結果は bool 型です。

サンプルコード

#include<iostream>
using namespace std;

int main() {
    bool x = true, y = false;
    cout << (x || y) << endl;   // 論理OR
    cout << (x && y) << endl;   // 論理AND
    cout << (!x) << endl;       // 論理否定
    return 0;
}

実行結果

このコードを実行すると、次の出力が得られます。

1
0
0

結果の解説

出力がこのようになる理由は以下の通りです。

  • x || y:x が true なので、片方でも true なら OR は true → 1
  • x && y:y が false のため、両方とも true でない限り AND は false → 0
  • !x:x が true のため、その否定は false → 0

なお、C++では bool 型の値を cout に出力すると、true は「1」、false は「0」として表示されます。より読みやすい出力にしたい場合は、std::boolalpha を使うことで「true」「false」という文字列で表示することも可能です。

  1. C#の論理演算子とは?&&・||・! の使い方をサンプル付きで解説

    論理演算子は、真偽値(bool型:true / false)に対して使用する演算子です。C#では、主に以下の3つの論理演算子が用意されています。演算子説明&&論理AND(かつ)。両方のオペランドが true の場合にのみ、条件式全体が true になります。||論理OR(または)。2つのオペランドのうち、どちらか一方でも true であれば、条件式全体が true になります。!論理NOT(否定)。オペランドの論理状態を反転させます。条件が true なら false に、false なら true になります。それでは、C#で論理演算子を実際にどう使うのか、具体例を見ていきま

  2. Pythonの論理演算子(and・or・not)の使い方を徹底解説

    Pythonの論理演算子とは Pythonでは、複数の条件を組み合わせて評価するための論理演算子が用意されています。主な論理演算子は「and」「or」「not」の3種類です。 ここでは、変数 a に 10、変数 b に 20 が代入されている場合を例に、それぞれの演算子の動作を解説します。 1. and(論理積) 両方のオペランドが真(True)である場合にのみ、条件全体が真になります。どちらか一方でも偽(False)であれば、結果は偽となります。 15) # True 2. or(論理和) 2つのオペランドのうち、どちらか一方でもゼロ以外(真)であれば、条件全体が真になります。両方が