演算子 (C# プログラミング ガイド)
C# では、演算子は式またはステートメントの中で 1 つ以上のオペランドに適用されるプログラム要素です。インクリメント演算子 (++) や new など、1 つのオペランドを受け取る演算子を単項演算子と言います。算術演算子 (+、-、*、/) など、2 つのオペランドを受け取る演算子を二項演算子と言います。条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。
次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。インクリメント演算子 ++ は、オペランド y の値を変更します。
y++;
次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。代入演算子 = には、オペランドとして整数の変数 y と式 2 + 3 が含まれています。式 2 + 3 自体も、加算演算子と、2 つのオペランド (2 と 3) で構成されています。
y = 2 + 3;
演算子、評価、演算子の優先順位
オペランドには、他の任意の数の式で構成される、任意のサイズの有効な式を使用できます。複数の演算子を含む式の場合、演算子が適用される順序は演算子の優先順位、結合規則、およびかっこによって決定されます。
各演算子には優先順位が定義されています。優先順位のレベルが異なる複数の演算子を含む式の場合、演算子の優先順位によって演算子が評価される順序が決定されます。たとえば、次のステートメントでは n1 に 3 が代入されます。
n1 = 11 - 2 * 4;
乗算は減算よりも優先順位が高いため、最初に乗算が実行されます。
以下の表では、実行する演算の種類を基にして演算子を分類しています。各カテゴリは、優先順位に従って配列されています。
主な演算子
式 |
Description |
---|---|
x.y |
メンバー アクセス。 |
f(x) |
メソッドおよびデリゲートの呼び出し。 |
a[x] |
配列アクセスおよびインデクサー アクセス。 |
x++ |
後置インクリメント。 |
x-- |
後置デクリメント。 |
new T(...) |
オブジェクトおよびデリゲートの作成。 |
new T(...){...} |
初期化子を使用したオブジェクトの作成。「オブジェクト初期化子とコレクション初期化子 (C# プログラミング ガイド)」を参照してください。 |
new {...} |
匿名オブジェクト初期化子。「匿名型 (C# プログラミング ガイド)」を参照してください。 |
new T[...] |
配列の作成。「配列 (C# プログラミング ガイド)」を参照してください。 |
typeof(T) |
T 型の System.Type オブジェクトを取得します。 |
checked(x) |
checked コンテキストで式を評価します。 |
unchecked(x) |
unchecked コンテキストで式を評価します。 |
default (T) |
T 型の既定値を取得します。 |
delegate {} |
匿名関数 (匿名メソッド)。 |
単項演算子
式 |
Description |
---|---|
+x |
同一。 |
-x |
否定。 |
!x |
論理否定。 |
~x |
ビットごとの否定。 |
++x |
前置インクリメント。 |
--x |
前置デクリメント。 |
(T)x |
x を明示的に T 型に変換します。 |
乗算演算子
式 |
Description |
---|---|
乗算 |
|
除算 |
|
剰余。 |
加法演算子
式 |
Description |
---|---|
x + y |
加算、文字列の連結、デリゲートの組み合わせ。 |
x - y |
減算、デリゲートの削除。 |
シフト演算子
式 |
Description |
---|---|
x << y |
左シフト。 |
x >> y |
右シフト。 |
関係演算子と型演算子
式 |
Description |
---|---|
x < y |
より小さい |
x > y |
より大きい |
x <= y |
以下。 |
x >= y |
以上。 |
x is T |
x が T の場合は true を返します。それ以外の場合は false を返します。 |
x as T |
T として型指定された x を返します。x が T でない場合は null を返します。 |
等値演算子
式 |
Description |
---|---|
x == y |
等しい |
x != y |
等しくない |
論理演算子、条件演算子、Null 演算子
[カテゴリ] |
式 |
Description |
---|---|---|
論理 AND |
x & y |
整数のビットごとの AND、ブール型の論理 AND。 |
論理 XOR |
x ^ y |
整数のビットごとの XOR、ブール型の論理 XOR。 |
論理 OR |
x| y |
整数のビットごとの OR、ブール型の論理 OR。 |
条件 AND |
x && y |
x が true の場合にのみ y を評価します。 |
条件 OR |
x || y |
x が false の場合にのみ y を評価します。 |
Null 合体演算子 |
x ?? y |
x が null の場合は y と評価され、それ以外の場合は x と評価されます。 |
条件 |
x ?: y : z |
x が true の場合は y と評価され、x が false の場合は z と評価されます。 |
代入演算子と匿名関数
式 |
Description |
---|---|
代入 |
|
x op= y |
|
(T x) => y |
匿名関数 (ラムダ式) |
結合規則
1 つの式に同じ優先順位の演算子が複数個含まれている場合、それらの演算子は結合規則に基づいて評価されます。結合規則が左から右の演算子は、左から右に評価されます。たとえば、x * y / z は (x * y) / z と評価されます。結合規則が右から左の演算子は、右から左に評価されます。たとえば、代入演算子は結合規則が右から左です。そうでない場合、次のコードはエラーになります。
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
代入演算子と三項演算子 (?:) は、結合規則が右から左です。他の二項演算子はすべて結合規則が左から右です。
式に含まれる演算子の結合規則が左から右であっても、右から左であっても、各式のオペランドは初めに左から右に評価されます。次の例では、演算子とオペランドの評価の順序について示します。
ステートメント |
評価の順序 |
---|---|
a = b |
a、b、= |
a = b + c |
a、b、c、+、= |
a = b + c * d |
a、b、c、d、*、+、= |
a = b * c + d |
a、b、c、*、d、+、= |
a = b - c + d |
a、b、c、-、d、+、= |
a += b -= c |
a、b、c、-=、+= |
かっこの追加
かっこを使用すると、演算子の優先順位と結合規則によって定められた順序を変更できます。たとえば、2 + 3 * 2 は通常、8 と評価されます。乗算演算子の方が加法演算子よりも優先順位が高いからです。しかし、この式を (2 + 3) * 2 と記述すると、加算の方が乗算よりも先に評価され、結果は 10 になります。次の例では、かっこを使用した式での評価の順序について示します。前の例では、演算子が適用される前にオペランドが評価されていました。
ステートメント |
評価の順序 |
---|---|
a = (b + c) * d |
a、b、c、+、d、*、= |
a = b - (c + d) |
a、b、c、d、+、-、= |
a = (b + c) * (d - e) |
a、b、c、+、d、e、-、*、= |
演算子のオーバーロード
カスタム クラスやカスタム構造体では、演算子の動作を変更できます。このプロセスは演算子のオーバーロードと呼ばれます。詳細については、「オーバーロードされた演算子 (C# プログラミング ガイド)」を参照してください。
関連項目
詳細については、「演算子キーワード (C# リファレンス)」および「C# 演算子」の各トピックを参照してください。
参照
関連項目
ステートメント、式、および演算子 (C# プログラミング ガイド)