연산자(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에서 직접 코드 블록의 산술 오버플로 검사 여부를 제어할 수도 있습니다. |