C# 연산자(C# 참조)C# operators (C# reference)

C#은 기본 제공 형식에서 지원되는 여러 연산자를 제공합니다.C# provides a number of operators supported by the built-in types. 예를 들어 산술 연산자는 숫자 피연산자를 사용하여 산술 연산을 수행하고 부울 논리 연산자bool 피연산자를 사용하여 논리 연산을 수행합니다.For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. 특정 연산자는 오버로드할 수 있습니다.Certain operators can be overloaded. 연산자 오버로드를 사용하여 사용자 정의 형식의 피연산자에 대해 연산자 동작을 지정할 수 있습니다.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

에서 연산자 우선 순위 및 결합성은 연산이 수행되는 순서를 결정합니다.In an expression, operator precedence and associativity determine the order in which the operations are performed. 괄호를 사용하여 연산자 우선 순위 및 결합성에 따라 주어진 계산 순서를 변경할 수 있습니다.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

연산자 우선 순위Operator precedence

여러 연산자가 있는 식에서 우선 순위가 높은 연산자는 연산자가 우선 순위가 낮은 연산자보다 먼저 계산됩니다.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. 다음 예제에서는 곱하기가 더하기보다 높은 우선 순위를 가지므로 곱하기가 먼저 수행됩니다.In the following example, the multiplication is performed first because it has higher precedence than addition:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

괄호를 사용하여 연산자 우선 순위에 따라 주어진 계산 순서를 변경합니다.Use parentheses to change the order of evaluation imposed by operator precedence:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

다음 표에서는 우선순위가 가장 높은 것부터 시작하여 순서대로 C# 연산자를 나열합니다.The following table lists the C# operators starting with the highest precedence to the lowest. 각 행 내의 연산자는 우선 순위가 같습니다.The operators within each row have the same precedence.

연산자Operators 범주 또는 이름Category or name
x.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->yx.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->y Primary
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true 및 false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false 단항Unary
x..yx..y 범위Range
switchswitch switchswitch expression
x * y, x / y, x % yx * y, x / y, x % y 곱하기Multiplicative
x + y, x – yx + y, x – y 더하기Additive
x << y, x >> yx << y, x >> y ShiftShift
x < y, x > y, x <= y, x >= y, is, asx < y, x > y, x <= y, x >= y, is, as 관계형 및 형식 테스트Relational and type-testing
x == y, x != yx == y, x != y 같음Equality
x & y 부울 논리 AND 또는 비트 논리 ANDBoolean logical AND or bitwise logical AND
x ^ y 부울 논리 XOR 또는 비트 논리 XORBoolean logical XOR or bitwise logical XOR
x | y OR 또는 비트 논리 ORBoolean logical OR or bitwise logical OR
x && yx && y 조건부 ANDConditional AND
x || yx || y 조건부 ORConditional OR
x ?? yx ?? y Null 병합 연산자Null-coalescing operator
c ? t : fc ? t : f 조건 연산자Conditional operator
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, =>x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => 할당 및 람다 선언Assignment and lambda declaration

연산자 결합성Operator associativity

연산자의 우선 순위가 같은 경우 연산자의 결합성이 연산이 수행되는 순서를 결정합니다.When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • ‘왼쪽 결합성이 있는’ 연산자는 왼쪽에서 오른쪽으로 계산됩니다. Left-associative operators are evaluated in order from left to right. 대입 연산자null 병합 연산자 를 제외하고, 모든 이진 연산자는 왼쪽 결합성이 있습니다.Except for the assignment operators and the null-coalescing operators, all binary operators are left-associative. 예를 들어, a + b - c(a + b) - c로 계산됩니다.For example, a + b - c is evaluated as (a + b) - c.
  • ‘오른쪽 결합성이 있는’ 연산자는 오른쪽에서 왼쪽으로 계산됩니다. Right-associative operators are evaluated in order from right to left. 대입 연산자, null 병합 연산자 및 조건 연산자 ?:는 오른쪽 결합성이 있습니다.The assignment operators, the null-coalescing operators, and the conditional operator ?: are right-associative. 예를 들어, x = y = zx = (y = z)로 계산됩니다.For example, x = y = z is evaluated as x = (y = z).

괄호를 사용하여 연산자 결합성에 따라 주어진 계산 순서를 변경합니다.Use parentheses to change the order of evaluation imposed by operator associativity:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

피연산자 계산Operand evaluation

연산자 우선 순위 및 결합성과 관계없이 식의 피연산자는 왼쪽에서 오른쪽으로 계산됩니다.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. 다음 예제는 연산자와 피연산자가 계산되는 순서를 보여 줍니다.The following examples demonstrate the order in which operators and operands are evaluated:

Expression 계산 순서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, *

일반적으로 모든 연산자 피연산자가 계산됩니다.Typically, all operator operands are evaluated. 그러나 일부 연산자는 조건부로 피연산자를 계산합니다.However, some operators evaluate operands conditionally. 즉, 이와 같은 연산자의 첫 번째 피연산자 값이 다른 피연산자를 계산해야 할지 여부 또는 계산해야 할 다른 피연산자를 정의합니다.That is, the value of the leftmost operand of such an operator defines if (or which) other operands should be evaluated. 이에 해당하는 연산자는 조건부 논리 AND(&&)OR(||) 연산자, null 병합 연산자 ????=, null 조건부 연산자 ?.?[], 그리고 조건 연산자 ?:입니다.These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operators ?? and ??=, the null-conditional operators ?. and ?[], and the conditional operator ?:. 자세한 내용은 각 연산자에 관한 설명을 참조하세요.For more information, see the description of each operator.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양연산자 섹션을 참조하세요.For more information, see the Operators section of the C# language specification.

참조See also