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値の条件判断には通常「||」を使用し、ビット演算が必要な場合には「|」を使用するのが一般的です。
-
Pythonの「!=」演算子と「<>」演算子の違いをわかりやすく解説
Pythonには、2つの値が等しくないかどうかを判定するための比較演算子として、かつて「!=」と「<>」の2種類が存在していました。一見似ているこの2つの演算子ですが、Pythonのバージョンによって扱いが大きく異なります。本記事では、それぞれの違いと注意点を解説します。 Python 2.xでは両方の演算子が使用可能 Python 2.xでは、「!=」と「<>」のどちらの演算子も使用できます。どちらも動作はまったく同じで、2つのオペランド(被演算子)が等しくない場合にTrueを返し、等しい場合にはFalseを返します。 >>> 1 != 2 True >>&g
-
Pythonの「=」と「==」の違いとは?代入と比較の使い分けを徹底解説
Pythonにおける「=」と「==」の基本的な違いPythonでは「=」と「==」はまったく異なる役割を持つ記号です。初心者が混同しやすいポイントですが、それぞれの意味を正しく理解しておくことが重要です。「=」は代入演算子Pythonにおいて「=」記号は代入演算子として定義されています。左辺には1つの変数を、右辺には式を置く必要があり、右辺の式が評価された結果の値が、左辺の変数に格納されます。つまり、式と変数名は入れ替えて使うことはできません。>>> a=10 >>> b=20 >>> c=a+b >>> a,b,c (1