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

C# では、 演算子 は式またはステートメントの中で 1 つ以上の オペランド に適用されるプログラム要素です。In C#, an operator is a program element that is applied to one or more operands in an expression or statement. インクリメント演算子 (++) や newなど、1 つのオペランドを受け取る演算子を 単項 演算子と言います。Operators that take one operand, such as the increment operator (++) or new, are referred to as unary operators. 算術演算子 (+-*/) など、2 つのオペランドを受け取る演算子を 二項 演算子と言います。Operators that take two operands, such as arithmetic operators (+,-,*,/), are referred to as binary operators. 条件演算子 (?:) は、3 つのオペランドを受け取る、C# でただ 1 つの三項演算子です。One operator, the conditional operator (?:), takes three operands and is the sole ternary operator in C#.

次の C# ステートメントには、1 つの単項演算子と 1 つのオペランドがあります。The following C# statement contains a single unary operator and a single operand. インクリメント演算子 ++は、オペランド yの値を変更します。The increment operator, ++, modifies the value of the operand y.

y++;

次の C# ステートメントには、それぞれ 2 つのオペランドを持つ 2 つの二項演算子があります。The following C# statement contains two binary operators, each with two operands. 代入演算子 =には、オペランドとして整数の変数 y と式 2 + 3 が含まれています。The assignment operator, =, has the integer variable y and the expression 2 + 3 as operands. 2 + 3 自体も、加算演算子と、2 つのオペランド ( 23) で構成されています。The expression 2 + 3 itself consists of the addition operator and two operands, 2 and 3.

y = 2 + 3;

オペランドは、任意の長さのコードで構成される有効な式で、任意の数の副次式を含むことができます。An operand can be a valid expression that is composed of any length of code, and it can comprise any number of sub expressions. 複数の演算子を含む式の場合、演算子が適用される順序は 演算子の優先順位結合規則、およびかっこによって決定されます。In an expression that contains multiple operators, the order in which the operators are applied is determined by operator precedence, associativity, and parentheses.

演算子の優先順位Operator precedence

各演算子には優先順位が定義されています。Each operator has a defined precedence. 優先順位のレベルが異なる複数の演算子を含む式の場合、演算子の優先順位によって演算子が評価される順序が決定されます。In an expression that contains multiple operators that have different precedence levels, the precedence of the operators determines the order in which the operators are evaluated. たとえば、次のステートメントでは n1 に 3 が代入されます。For example, the following statement assigns 3 to n1:

n1 = 11 - 2 * 4;

乗算は減算よりも優先順位が高いため、最初に乗算が実行されます。The multiplication is executed first because multiplication takes precedence over subtraction.

優先度順に並べられた C# 演算子の完全な一覧については、「C# 演算子」を参照してください。For the complete list of C# operators ordered by precedence level, see C# operators.

結合規則Associativity

1 つの式に同じ優先順位の演算子が複数個含まれている場合、それらの演算子は結合規則に基づいて評価されます。When two or more operators that have the same precedence are present in an expression, they are evaluated based on associativity. 結合規則が左から右の演算子は、左から右に評価されます。Left-associative operators are evaluated in order from left to right. たとえば、 x * y / z(x * y) / zと評価されます。For example, x * y / z is evaluated as (x * y) / z. 結合規則が右から左の演算子は、右から左に評価されます。Right-associative operators are evaluated in order from right to left. たとえば、代入演算子は結合規則が右から左です。For example, the assignment operator is right associative. そうでない場合、次のコードはエラーになります。If it were not, the following code would result in an error.

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;  

別の例として、三項演算子 (?:) は、結合規則が右から左です。As another example the ternary operator (?:) is right associative. ほとんどの二項演算子は結合関係が左から右です。Most binary operators are left associative.

式に含まれる演算子の結合規則が左から右であっても、右から左であっても、各式のオペランドは初めに左から右に評価されます。Whether the operators in an expression are left associative or right associative, the operands of each expression are evaluated first, from left to right. 次の例では、演算子とオペランドの評価の順序について示します。The following examples illustrate the order of evaluation of operators and operands.

ステートメントStatement 評価の順序Order of evaluation
a = b a、b、=a, b, =
a = b + c 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 + d a、b、c、-、d、+、=a, b, c, -, d, +, =
a += b -= c a、b、c、-=、+=a, b, c, -=, +=

かっこの追加Adding parentheses

かっこを使用すると、演算子の優先順位と結合規則によって定められた順序を変更できます。You can change the order imposed by operator precedence and associativity by using parentheses. たとえば、 2 + 3 * 2 は通常、8 と評価されます。乗算演算子の方が加法演算子よりも優先順位が高いからです。For example, 2 + 3 * 2 ordinarily evaluates to 8, because multiplicative operators take precedence over additive operators. しかし、この式を (2 + 3) * 2と記述すると、加算の方が乗算よりも先に評価され、結果は 10 になります。However, if you write the expression as (2 + 3) * 2, the addition is evaluated before the multiplication, and the result is 10. 次の例では、かっこを使用した式での評価の順序について示します。The following examples illustrate the order of evaluation in parenthesized expressions. 前の例では、演算子が適用される前にオペランドが評価されていました。As in previous examples, the operands are evaluated before the operator is applied.

ステートメントStatement 評価の順序Order of evaluation
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) * (d - e) a、b、c、+、d、e、-、*、=a, b, c, +, d, e, -, *, =

演算子のオーバーロードOperator overloading

カスタム クラスやカスタム構造体では、特定の演算子の動作を定義できます。You can define the behavior of certain operators for custom classes and structs. このプロセスは 演算子のオーバーロードと呼ばれます。This process is referred to as operator overloading. 詳細については、「演算子のオーバーロード」を参照してください。For more information, see Operator overloading.

関連項目See also