C++ 단항 연산자란?
단항 연산자(unary operator)는 하나의 피연산자(operand)에만 작용하여 새로운 값을 생성하는 연산자입니다. C++에서는 다양한 단항 연산자를 제공하며, 각 연산자의 종류와 설명은 아래 표와 같습니다.
| 연산자 | 설명 |
|---|---|
| 역참조 연산자 (*) | 포인터 변수에 작동하며, 포인터가 가리키는 주소에 저장된 값에 해당하는 l-value를 반환합니다. 이를 포인터의 "역참조(dereferencing)"라고 합니다. |
| 주소 연산자 (&) | 피연산자의 메모리 주소를 가져옵니다. 주소 연산자의 피연산자는 함수 지정자이거나, 비트 필드가 아니며 register 저장 클래스 지정자로 선언되지 않은 객체를 나타내는 l-value여야 합니다. |
| 단항 플러스 (+) | 결과는 피연산자의 값 그대로입니다. 피연산자는 반드시 산술(arithmetic) 타입이어야 합니다. |
| 단항 마이너스 (-) | 피연산자의 부호를 반전합니다. 피연산자는 임의의 산술 타입일 수 있으며, 연산 결과는 l-value가 아닙니다. |
| 논리 부정 (!) | 피연산자의 진릿값을 반전시킵니다. 피연산자는 산술 또는 포인터 타입(또는 이를 평가하는 표현식)이어야 하며, 암시적으로 bool 타입으로 변환됩니다. |
| 1의 보수 (~) | '비트 보수(bitwise complement)' 또는 '비트 NOT' 연산자라고도 하며, 피연산자의 비트별 1의 보수를 계산합니다. 피연산자는 정수(integer) 타입이어야 합니다. |
| 전위 증가 (++) | 피연산자에 1을 더하고, 증가된 값이 곧 표현식의 결과가 됩니다. 피연산자는 const가 아닌 l-value여야 하며, 결과는 피연산자와 같은 타입의 l-value입니다. |
| 전위 감소 (--) | 피연산자에서 1을 빼고, 감소된 값이 곧 표현식의 결과가 됩니다. 피연산자는 const가 아닌 l-value여야 하며, 결과는 피연산자와 같은 타입의 l-value입니다. |
| 캐스트 연산자 () | 특정 상황에서 객체의 타입을 명시적으로 변환(explicit conversion)하는 방법을 제공합니다. 형 변환이 수행된 후 컴파일러는 cast-expression을 type-name 타입으로 취급합니다. |
| sizeof | 컴파일 시간(compile-time)에 피연산자의 크기를 계산하는 데 사용되는 단항 연산자입니다. |
| new | 메모리를 동적으로 할당하기 위해 사용되는 메모리 할당 연산자입니다. |
| delete | 동적으로 할당된 메모리를 해제하기 위해 사용되는 메모리 해제 연산자입니다. |
이 단항 연산자들은 모두 오른쪽에서 왼쪽으로 결합(right-to-left associativity)되는 특징이 있습니다. 또한 단항 표현식은 일반적으로 후위(postfix) 표현식이나 기본(primary) 표현식 앞에 위치하는 구문 형태로 구성됩니다.
예제 코드
아래 예제를 통해 단항 마이너스(-) 연산자와 캐스트(()) 연산자가 실제로 어떻게 동작하는지 확인해 보겠습니다.
#include<iostream>
using namespace std;
int main() {
int x;
float y = 1.23;
x = (int) y; // float형 변수 y를 int형으로 명시적 형 변환 (x = 1)
x = -x; // 단항 마이너스 연산자로 부호 반전 (x = -1)
cout << x;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
-1
실수형 변수 y(1.23)가 캐스트 연산자에 의해 정수형 1로 변환된 뒤, 단항 마이너스 연산자를 통해 부호가 반전되어 최종적으로 -1이 출력되는 것을 확인할 수 있습니다.