演算子 (C# プログラミング ガイド)
C# では演算子とは、オペランドと呼ばれる 1 つ以上の式を入力として受け取り、値を返す用語または記号のことです。インクリメント演算子 (++) や new など、1 つのオペランドを受け取る演算子を単項演算子といいます。また、算術演算子 (+、-、*、/) など、2 つのオペランドを受け取る演算子を二項演算子といいます。条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。
次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。インクリメント演算子 ++ は、オペランド y
の値を変更します。
y++;
次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。代入演算子 = には、オペランドとして整数 y
と式 2 + 3
があります。式 2 + 3
自体には、加算演算子があり、2
と 3
の 2 つの整数をオペランドとして使用します。
y = 2 + 3;
オペランドには、他の任意の数の演算で構成される、任意のサイズの有効な式を使用できます。
式の演算子は、演算子の優先順位と呼ばれる特定の順序で評価されます。以下の表では、実行する演算の種類を基にして演算子を分類しています。各カテゴリは、優先順位に従って配列されています。
1 次式 |
x.y、f(x)、a[x]、x++、x--、new、typeof、checked、unchecked |
単項式 |
+、-、!、~、++x、--x、(T)x |
算術 — 乗法 |
*、/、% |
算術 — 加法 |
+、- |
シフト |
<<、>> |
関係式と型検査 |
<、>、<=、>=、is、as |
等値式 |
==、!= |
論理 (優先順) |
&、^、| |
条件 (優先順) |
&&、||、?: |
代入 |
=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>= |
優先順位が同じ演算子が式に 2 つ含まれている場合、それらの演算子は、結合規則に基づいて評価されます。結合規則が左から右の演算子は、左から右に評価されます。たとえば、x * y / z
は (x * y) / z
と評価されます。結合規則が右から左の演算子は、右から左に評価されます。代入演算子と三項演算子 (?:) は、結合規則が右から左です。他の二項演算子はすべて結合規則が左から右です。ただし、C# の標準では、式の中でインクリメント命令の "設定" 部分をいつ実行するかを指定していません。たとえば、次のコード例の出力は 6 になります。
int num1 = 5;
num1++;
System.Console.WriteLine(num1);
ただし、次のコード例の出力は未定義です。
int num2 = 5;
num2 = num2++; //not recommended
System.Console.WriteLine(num2);
そのため、後者はお勧めできません。かっこを使って式を囲むと、その式は他の式よりも先に評価されます。たとえば、2 + 3 * 2
は通常、8 になります。その理由は、乗算演算子の方が加算演算子よりも優先順位が高いからです。しかし、この式を (2 + 3 ) * 2
と記述すると、結果は 10 になります。この場合、加算演算子 (+) を乗算演算子 (*) より先に評価するように C# コンパイラに指示するからです。
カスタム クラスやカスタム構造体では、演算子の動作を変更できます。このプロセスを演算子のオーバーロードと言います。詳細については、「オーバーロードされた演算子 (C# プログラミング ガイド)」を参照してください。
関連項目
詳細については、「演算子キーワード (C# リファレンス)」および「C# の演算子」を参照してください。
参照
関連項目
ステートメント、式、および演算子 (C# プログラミング ガイド)