연산자(C# 프로그래밍 가이드)

C#에서 연산자는 식 또는 문에서 하나 이상의 피연산자에 적용되는 프로그램 요소입니다. 증가 연산자(++)나 new 같이 피연산자 하나를 사용하는 연산자를 단항 연산자라고 합니다. 산술 연산자(+, -, *, /) 같이 피연산자 두 개를 사용하는 연산자를 이항 연산자라고 합니다. 조건 연산자(?:)는 피연산자 세 개를 사용하며 이는 C#에서 유일한 삼진 연산자입니다.

다음 C# 문에는 단항 연산자 하나와 피연산자 하나가 들어 있습니다. 증가 연산자 ++는 피연산자 y의 값을 수정합니다.

y++;

다음 C# 문에는 이항 연산자가 두 개 있습니다. 각 연산자는 피연산자를 두 개씩 사용합니다. 할당 연산자 =에는 정수 변수 y와 식 2 + 3이 피연산자로 사용됩니다. 식 2 + 3 자체는 더하기 연산자와 두 개의 피연산자, 2 및 3으로 구성됩니다.

y = 2 + 3;

연산자, 평가, 및 연산자 우선 순위

피연산자는 유효한 식이거나 다른 연산으로 구성될 수 있는데 이때 식의 크기나 식의 수에는 제한이 없습니다. 여러 연산자를 포함하는 식에서 연산자가 적용되는 순서는 operator precedence, associativity 및 괄호로 결정됩니다.

각 연산자에는 정의된 우선 순위가 있습니다. 다른 우선 순위 수준을 가진 여러 연산자가 포함된 식에서 연산자의 우선 순위는 연산자가 평가되는 순서를 결정합니다. 예를 들어, 다음 문은 n1에 3을 할당합니다.

n1 = 11 - 2 * 4;

곱셈은 뺄셈보다 우선하기 때문에 곱하기가 가장 먼저 실행됩니다.

다음 표에서는 연산자를 각각 수행하는 연산의 종류에 따라 범주별로 구분하여 보여 줍니다. 이 범주는 우선 순위에 따라 나열되어 있습니다.

기본 연산자

설명

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

ID

-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 또는 null(x를 T로 형식화할 수 없는 경우)을 반환합니다.

같음 연산자

설명

x == y

같음

x != y

같지 않음

논리, 조건 및 null 연산자

범주

설명

논리곱

x & y

정수 비트 AND, Boolean 논리곱 연산자

논리 XOR 연산자

x ^ y

정수 비트 XOR, Boolean 논리 XOR 연산자

논리합

x | y

정수 비트 OR, Boolean 논리합 연산자

조건부 논리곱 연산자

x && y

x가 true인 경우에만 y를 계산합니다.

조건부 논리합 연산자

x || y

x가 false인 경우에만 y를 계산합니다.

Null 결합

x ?? y

x가 null인 경우 y로 계산하고, 그렇지 않으면 x로 계산합니다.

조건

x ?: y : z

x가 true이면 y로 계산되고 x가 false이면 z로 계산됩니다.

할당 및 익명 연산자

설명

=

할당 연산

x op= y

복합 할당. 지원되는 연산자는 다음과 같습니다. +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=

(T x) => y

익명 함수(람다 식)

결합성

우선 순위가 동일한 연산자 두 개 이상이 식 하나에 있으면 두 연산자의 결합성에 따라 연산 순서가 결정됩니다. 왼쪽 결합성이 있는 연산자는 왼쪽에서 오른쪽으로 계산됩니다. 예를 들어, 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# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드