연산자(C# 및 Java)

업데이트: 2007년 11월

C#에서는 다음 표에 나와 있는 것과 같이 Java에서 지원하는 모든 적용 가능한 연산자를 제공합니다. 표의 끝에는 C#에서 사용할 수 있지만 Java에서 제공하지 않는 몇 가지 새로운 연산자가 나와 있습니다.

범주

기호

단항 연산자

++--+-!~()

승제 연산자

*/%

가감 연산자

+ -

시프트 연산자

<< >>

관계 연산자

< > <= >= instanceof

같음 연산자

== !=

논리 AND

&

논리 XOR 연산자

^

논리 OR

|

조건부 논리 AND 연산자

&&

조건부 논리 OR 연산자

||

조건 연산자

? :

할당 연산자

= *= /= %= += -= <<= >>= &= ^= |=

연산자 형식

typeof

연산자 크기

sizeof

오버플로 검사 적용

checked

오버플로 검사 안 함

unchecked

C#에서 사용할 수 없는 유일한 Java 연산자는 시프트 연산자(>>>)입니다. Java에서는 부호 없는 변수를 사용할 수 없기 때문에 이 연산자가 필요합니다. 예를 들어, 오른쪽 시프트가 필요한 경우에는 최상위 비트에 1을 삽입합니다.

C#에서는 부호 없는 변수를 지원하므로 표준 >> 연산자만 있으면 됩니다. 피연산자에 부호가 있는지 없는지 여부에 따라 이 연산자에서 생성되는 결과가 달라집니다. 부호 없는 숫자를 오른쪽 시프트하면 최상위 비트에 0이 삽입되는 반면, 부호 있는 숫자를 오른쪽 시프트하면 이전의 최상위 비트가 복사됩니다.

Checked 및 Unchecked 연산자

사용 중인 데이터 형식에 비트 수를 할당하기에는 결과가 너무 큰 경우에는 산술 연산의 결과로 오버플로가 발생합니다. checked 및 unchecked 키워드를 사용하면 지정된 정수 계열 산술 연산에 대해 이러한 오버플로를 검사하거나 무시할 수 있습니다. 식이 checked를 사용하는 상수 식이면 컴파일 시 오류가 발생합니다.

다음은 이러한 연산자를 보여 주는 간단한 예제입니다.

class TestCheckedAndUnchecked
{
    static void Main()
    {
        short a = 10000;
        short b = 10000;

        short c = (short)(a * b);                     // unchecked by default
        short d = unchecked((short)(10000 * 10000));  // unchecked
        short e = checked((short)(a * b));            // checked - run-time error

        System.Console.WriteLine(10000 * 10000);  // 100000000
        System.Console.WriteLine(c);              // -7936
        System.Console.WriteLine(d);              // -7936
        System.Console.WriteLine(e);              // no result
    }    
}

이 코드에서 unchecked 연산자는 컴파일 시 오류를 회피합니다. 그렇지 않으면 다음과 같은 문이 발생합니다.

short d = unchecked((short)(10000 * 10000));  // unchecked

다음 식은 기본적으로 검사되지 않으므로 값이 오버플로되어도 오류가 발생하지 않습니다.

short c = (short)(a * b);                     // unchecked by default

checked 연산자를 사용하면 런타임에 식의 오버플로 여부를 검사할 수 있습니다.

short e = checked((short)(a * b));            // checked - run-time error

처음 두 값을 d와 c에 할당하면 프로그램을 실행할 때 값이 -7936으로 오버플로되어도 오류가 발생하지 않지만, checked()를 사용하여 e의 값을 곱하려 시도하면 프로그램에서 OverflowException이 throw됩니다.

참고:

명령줄 컴파일러 스위치(/checked)를 사용하거나 프로젝트별로 Visual Studio에서 직접 코드 블록의 산술 오버플로 검사 여부를 제어할 수도 있습니다.

참고 항목

개념

C# 프로그래밍 가이드

참조

C# 연산자

기타 리소스

Java 개발자를 위한 C# 프로그래밍 언어