演算子 (C# プログラミング ガイド)
更新 : 2008 年 7 月
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;
オペランドには、他の任意の数の演算で構成される、任意のサイズの有効な式を使用できます。式を評価するとき、コンパイラは、最初にすべてのオペランドを左から右へ評価します。すべてのオペランドの評価が完了すると、演算子が特定の順序 (演算子の優先順位) で評価されます。以下の表では、実行する演算の種類を基にして演算子を分類しています。各カテゴリは、優先順位に従って配列されています。
主な演算子
式 |
説明 |
---|---|
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 {} |
匿名関数 (匿名メソッド)。 |
単項演算子
式 |
説明 |
---|---|
+x |
同一。 |
-x |
否定。 |
!x |
論理否定。 |
~x |
ビットごとの否定。 |
++x |
前置インクリメント。 |
--x |
前置デクリメント。 |
(T)x |
x を明示的に T 型に変換します。 |
乗算演算子
式 |
説明 |
---|---|
乗算。 |
|
除算。 |
|
剰余。 |
加算演算子
式 |
説明 |
---|---|
x + y |
加算、文字列の連結、デリゲートの組み合わせ。 |
x - y |
減算、デリゲートの削除。 |
シフト演算子
式 |
説明 |
---|---|
x << y |
左シフト。 |
x >> y |
右シフト。 |
関係演算子と型演算子
式 |
説明 |
---|---|
x < y |
より小さい。 |
x > y |
より大きい。 |
x <= y |
以下。 |
x >= y |
以上。 |
x is T |
x が T の場合は true を返します。それ以外の場合は false を返します。 |
x as T |
T として型指定された x を返します。x が T でない場合は null を返します。 |
等値演算子
式 |
説明 |
---|---|
x == y |
等しい。 |
x != y |
等しくない。 |
代入演算子と匿名関数
式 |
説明 |
---|---|
代入。 |
|
x op= y |
|
(T x) => y |
匿名関数 (ラムダ式) |
論理演算子、条件演算子、Null 演算子
カテゴリ |
式 |
説明 |
---|---|---|
論理 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 と評価されます。 |
優先順位の同じ演算子が式に 2 つ含まれている場合、それらの演算子は結合規則に基づいて評価されます。結合規則が左から右の演算子は、左から右に評価されます。たとえば、x * y / z は (x * y) / z と評価されます。結合規則が右から左の演算子は、右から左に評価されます。代入演算子と三項演算子 (?:) は、結合規則が右から左です。他の二項演算子はすべて結合規則が左から右です。
かっこを使って式を囲むと、その式は他の式よりも先に評価されます。たとえば、2 + 3 * 2 は通常、8 になります。その理由は、乗算演算子の方が加算演算子よりも優先順位が高いからです。しかし、この式を (2 + 3) * 2 と記述すると、結果は 10 になります。この場合、加算演算子 (+) を乗算演算子 (*) より先に評価するように C# コンパイラに指示するからです。
カスタム クラスやカスタム構造体では、演算子の動作を変更できます。このプロセスは演算子のオーバーロードと呼ばれます。詳細については、「オーバーロードされた演算子 (C# プログラミング ガイド)」を参照してください。
関連項目
詳細については、「演算子キーワード (C# リファレンス)」および「C# の演算子」を参照してください。
参照
概念
参照
ステートメント、式、および演算子 (C# プログラミング ガイド)
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
未定義の出力について誤りのある説明を削除 |
情報の拡充 |