演算子 (C# プログラミング ガイド)

C# では演算子とは、オペランドと呼ばれる 1 つ以上の式を入力として受け取り、値を返す用語または記号のことです。インクリメント演算子 (++) や new など、1 つのオペランドを受け取る演算子を単項演算子といいます。また、算術演算子 (+-*/) など、2 つのオペランドを受け取る演算子を二項演算子といいます。条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。

次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。インクリメント演算子 ++ は、オペランド y の値を変更します。

y++;

次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。代入演算子 = には、オペランドとして整数 y と式 2 + 3 があります。式 2 + 3 自体には、加算演算子があり、23 の 2 つの整数をオペランドとして使用します。

y = 2 + 3;

オペランドには、他の任意の数の演算で構成される、任意のサイズの有効な式を使用できます。

式の演算子は、演算子の優先順位と呼ばれる特定の順序で評価されます。以下の表では、実行する演算の種類を基にして演算子を分類しています。各カテゴリは、優先順位に従って配列されています。

1 次式

x.y、f(x)、a[x]、x++、x--newtypeofcheckedunchecked

単項式

+-!~++x--x、(T)x

算術 — 乗法

*/%

算術 — 加法

+-

シフト

<<>>

関係式と型検査

<><=>=isas

等値式

==!=

論理 (優先順)

&^|

条件 (優先順)

&&||?:

代入

=+=-=*=/=%=&=|=^=<<=>>=

優先順位が同じ演算子が式に 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# プログラミング ガイド)

概念

C# プログラミング ガイド