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

C#における「|」演算子と「||」演算子の違いとは?

C#には、論理和(OR)を計算するための演算子として「|」と「||」の2種類が存在します。一見よく似ていますが、評価の仕方に重要な違いがあるため、適切に使い分けることが大切です。

「|」演算子とは

|」演算子は、オペランドの論理和を計算します。x | y は、x または y のどちらか一方でも true と評価されれば結果は true となり、両方とも false の場合にのみ false になります。

重要なポイントは、左辺の評価結果が true であっても、必ず両方のオペランドが評価されるという点です。右辺の値に関わらず処理が実行されるため、この動作は「非短絡評価」と呼ばれます。

また、整数型のオペランドに対しては、ビットごとの論理和(ビット演算)として動作します。

「||」演算子とは

||」演算子は、条件論理和演算子とも呼ばれ、「短絡評価(ショートサーキット)」を行う論理和演算子です。

x || y は、x または y のどちらか一方でも true と評価されれば結果は true になります。ただし、x が true と評価された場合、y は評価されません。これにより不要な処理を省き、パフォーマンスの向上や意図しないエラーの回避が可能になります。

例1:「|」演算子(ビット演算)

class Program {
   static void Main(string[] args){
      int a = 4;
      int b = 3;
      int c = 0;
      c = a | b;
      Console.WriteLine("Line 1 - Value of c is {0}", c);
      Console.ReadLine();
   }
}

出力結果

Value of c is 7
Here the values are converted to binary
4--100
3--011
Output 7 --111

この例では、整数値が2進数に変換され、ビットごとの論理和が計算されます。4(100)と 3(011)の各ビットを比較すると、結果は 7(111)になります。

例2:「||」演算子(条件分岐)

static void Main(string[] args){
   int a = 4;
   int b = 3;
   int c = 7;
   if (a > b || b > c){
      System.Console.WriteLine("a is largest");
   } else {
      System.Console.WriteLine("a is not largest");
   }
   Console.ReadLine();
}

出力結果

a is largest

この例では、最初の条件「a > b」が true を返した時点で、2つ目の条件「b > c」は評価されずに処理が進みます。これが短絡評価の典型的な動作です。

まとめ

|」は常に両方のオペランドを評価するのに対し、「||」は左辺が true の場合に右辺の評価をスキップします。bool値の条件判断には通常「||」を使用し、ビット演算が必要な場合には「|」を使用するのが一般的です。

  1. Pythonの「!=」演算子と「<>」演算子の違いをわかりやすく解説

    Pythonには、2つの値が等しくないかどうかを判定するための比較演算子として、かつて「!=」と「<>」の2種類が存在していました。一見似ているこの2つの演算子ですが、Pythonのバージョンによって扱いが大きく異なります。本記事では、それぞれの違いと注意点を解説します。 Python 2.xでは両方の演算子が使用可能 Python 2.xでは、「!=」と「<>」のどちらの演算子も使用できます。どちらも動作はまったく同じで、2つのオペランド(被演算子)が等しくない場合にTrueを返し、等しい場合にはFalseを返します。 >>> 1 != 2 True >>&g

  2. Pythonの「=」と「==」の違いとは?代入と比較の使い分けを徹底解説

    Pythonにおける「=」と「==」の基本的な違いPythonでは「=」と「==」はまったく異なる役割を持つ記号です。初心者が混同しやすいポイントですが、それぞれの意味を正しく理解しておくことが重要です。「=」は代入演算子Pythonにおいて「=」記号は代入演算子として定義されています。左辺には1つの変数を、右辺には式を置く必要があり、右辺の式が評価された結果の値が、左辺の変数に格納されます。つまり、式と変数名は入れ替えて使うことはできません。>>> a=10 >>> b=20 >>> c=a+b >>> a,b,c (1