C#における「||」演算子と「|」演算子の違いとは?
C#には、|| は論理OR(Logical OR)演算子、| はビット単位の論理OR(Bitwise Logical OR)演算子として存在します。どちらもブール値に対して使用できますが、両者の根本的な違いは評価(実行)のされ方にあります。
構文はどちらも同じ形式です。
bool_exp1 || bool_exp2bool_exp1 | bool_exp2
一見すると構文はよく似ていますが、実際の動作はまったく異なります。
|| 演算子(短絡評価)の動作
- まず
bool_exp1が評価され、その結果によって2つ目の式を評価するかどうかが決定されます。 bool_exp1がtrueであれば、OR の結果は確定してtrueとなるため、2つ目の式を評価しても意味がありません。bool_exp2が評価されるのは、bool_exp1がfalseを返した場合のみです。- このような動作から、
||は短絡演算子(ショートサーキット演算子)とも呼ばれます。最初の式の結果に基づいて、残りの評価を打ち切る(回路をショートさせる)ためです。
| 演算子(完全評価)の動作
- 一方、
|を使った場合、コンパイラは両方の式を必ず評価します。つまり、一方の結果に関係なく、両方のステートメントが実行されます。 - 片方がすでに
trueである場合、もう片方を評価しても結果は変わらないため、これは非効率な処理と言えます。OR の結果がfalseになるのは、両方の式がfalseと評価されたときだけだからです。
論理OR(||)のコード例
using System;
namespace DemoApplication{
public class Program{
static void Main(string[] args){
if(Condition1() || Condition2()){
Console.WriteLine("Logical OR If Condition Executed");
}
Console.ReadLine();
}
static bool Condition1(){
Console.WriteLine("Condition 1 executed");
return true;
}
static bool Condition2(){
Console.WriteLine("Condition 2 executed");
return true;
}
}
}出力結果
Condition 1 executed Logical OR If Condition Executed
Condition1() が true を返した時点で評価が打ち切られるため、Condition2() は実行されていません。
ビット単位の論理OR(|)のコード例
using System;
namespace DemoApplication{
public class Program{
static void Main(string[] args){
if(Condition1() | Condition2()){
Console.WriteLine("Logical OR If Condition Executed");
}
Console.ReadLine();
}
static bool Condition1(){
Console.WriteLine("Condition 1 executed");
return true;
}
static bool Condition2(){
Console.WriteLine("Condition 2 executed");
return true;
}
}
}出力結果
Condition 1 executed Condition 2 executed Logical OR If Condition Executed
| を使用した場合は、Condition1() の結果に関係なく Condition2() も実行されていることがわかります。
まとめ
| 項目 | || (論理OR) | | (ビット単位の論理OR) |
|---|---|---|
| 評価方式 | 短絡評価(必要な場合のみ2つ目を評価) | 常に両方のオペランドを評価 |
| パフォーマンス | 効率的 | やや非効率 |
| 主な用途 | ブール条件の判定 | ビット演算、副作用のあるメソッドを必ず実行したい場合 |
通常の条件分岐ではパフォーマンス面で有利な || を使うのが一般的ですが、右側の式に含まれる処理(メソッド呼び出しなど)を必ず実行したい特別なケースでは | が意図的に使われることもあります。
-
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