C++에는 프로그램에서 다양한 계산과 판단을 수행하기 위한 여러 종류의 연산자가 있습니다. 이들은 크게 산술 연산자, 관계 연산자, 논리 연산자, 비트 연산자, 대입 연산자, 그리고 기타 연산자로 분류할 수 있습니다. 각 연산자의 특징과 사용 예제를 함께 살펴보겠습니다.
1. 산술 연산자 (Arithmetic Operators)
변수 A에는 10, 변수 B에는 20이 저장되어 있다고 가정하겠습니다.
| 연산자 | 설명 |
|---|---|
| + | 두 피연산자를 더합니다. 예: A + B → 30 |
| - | 첫 번째 피연산자에서 두 번째 피연산자를 뺍니다. 예: A - B → -10 |
| * | 두 피연산자를 곱합니다. 예: A * B → 200 |
| / | 분자를 분모로 나눕니다. 예: B / A → 2 |
| % | 나머지(modulus) 연산자로, 정수 나눗셈 후의 나머지를 구합니다. 예: B % A → 0 |
| ++ | 증가 연산자로, 정수 값을 1만큼 증가시킵니다. 예: A++ → 11 |
| -- | 감소 연산자로, 정수 값을 1만큼 감소시킵니다. 예: A-- → 9 |
2. 관계 연산자 (Relational Operators)
마찬가지로 변수 A에는 10, 변수 B에는 20이 저장되어 있다고 가정합니다.
| 연산자 | 설명 |
|---|---|
| == | 두 피연산자의 값이 같은지 검사합니다. 같으면 조건이 참(true)이 됩니다. 예: (A == B) → 거짓 |
| != | 두 피연산자의 값이 다른지 검사합니다. 값이 서로 다르면 조건이 참이 됩니다. 예: (A != B) → 참 |
| > | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 검사합니다. 예: (A > B) → 거짓 |
| < | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은지 검사합니다. 예: (A < B) → 참 |
| >= | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 검사합니다. 예: (A >= B) → 거짓 |
| <= | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 검사합니다. 예: (A <= B) → 참 |
3. 논리 연산자 (Logical Operators)
여기서는 변수 A에 1, 변수 B에 0이 저장되어 있다고 가정합니다.
| 연산자 | 설명 |
|---|---|
| && | 논리 AND 연산자입니다. 두 피연산자가 모두 0이 아니면 조건이 참이 됩니다. 예: (A && B) → 거짓 |
| || | 논리 OR 연산자입니다. 두 피연산자 중 하나라도 0이 아니면 조건이 참이 됩니다. 예: (A || B) → 참 |
| ! | 논리 NOT 연산자입니다. 피연산자의 논리 상태를 반전시킵니다. 조건이 참이면 거짓으로 만듭니다. 예: !(A && B) → 참 |
4. 비트 연산자 (Bitwise Operators)
비트 연산자는 데이터를 비트(bit) 단위로 처리하며, 비트별로 연산을 수행합니다. &, |, ^ 연산자의 진리표(truth table)는 다음과 같습니다.
p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
A = 60, B = 13이라고 할 때, 이들을 이진수로 표현하면 다음과 같습니다.
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
| 연산자 | 설명 |
|---|---|
| & | 이진 AND 연산자입니다. 두 피연산자 모두에 해당 비트가 존재할 경우 결과에 복사됩니다. 예: (A & B) → 12 (0000 1100) |
| | | 이진 OR 연산자입니다. 어느 한쪽 피연산자에 해당 비트가 존재하면 결과에 복사됩니다. 예: (A | B) → 61 (0011 1101) |
| ^ | 이진 XOR 연산자입니다. 두 피연산자 중 한쪽에만 비트가 설정되어 있을 때 결과에 복사됩니다. 예: (A ^ B) → 49 (0011 0001) |
| ~ | 이진 1의 보수(one's complement) 연산자입니다. 단항 연산자로 비트를 반전('뒤집기')하는 효과가 있습니다. 예: (~A) → -61 (부호 있는 이진수이므로 2의 보수 형태인 1100 0011) |
| << | 이진 왼쪽 시프트 연산자입니다. 왼쪽 피연산자의 값을 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동시킵니다. 예: A << 2 → 240 (1111 0000) |
| >> | 이진 오른쪽 시프트 연산자입니다. 왼쪽 피연산자의 값을 오른쪽 피연산자가 지정한 비트 수만큼 오른쪽으로 이동시킵니다. 예: A >> 2 → 15 (0000 1111) |
5. 대입 연산자 (Assignment Operators)
대입 연산자는 변수에 값을 저장하는 데 사용되며, 산술·비트 연산과 결합된 복합 대입 연산자도 제공합니다.
| 연산자 | 설명 |
|---|---|
| = | 단순 대입 연산자입니다. 오른쪽 피연산자의 값을 왼쪽 피연산자에 대입합니다. 예: C = A + B → A + B의 결과를 C에 대입 |
| += | 덧셈 후 대입 연산자입니다. 오른쪽 피연산자를 왼쪽 피연산자에 더한 결과를 왼쪽에 대입합니다. 예: C += A ≡ C = C + A |
| -= | 뺄셈 후 대입 연산자입니다. 왼쪽 피연산자에서 오른쪽 피연산자를 뺀 결과를 왼쪽에 대입합니다. 예: C -= A ≡ C = C - A |
| *= | 곱셈 후 대입 연산자입니다. 두 피연산자를 곱한 결과를 왼쪽에 대입합니다. 예: C *= A ≡ C = C * A |
| /= | 나눗셈 후 대입 연산자입니다. 왼쪽 피연산자를 오른쪽 피연산자로 나눈 결과를 왼쪽에 대입합니다. 예: C /= A ≡ C = C / A |
| %= | 나머지 후 대입 연산자입니다. 두 피연산자로 나머지를 구한 결과를 왼쪽에 대입합니다. 예: C %= A ≡ C = C % A |
| <<= | 왼쪽 시프트 후 대입 연산자입니다. 예: C <<= 2 ≡ C = C << 2 |
| >>= | 오른쪽 시프트 후 대입 연산자입니다. 예: C >>= 2 ≡ C = C >> 2 |
| &= | 비트 AND 후 대입 연산자입니다. 예: C &= 2 ≡ C = C & 2 |
| ^= | 비트 배타적 OR(XOR) 후 대입 연산자입니다. 예: C ^= 2 ≡ C = C ^ 2 |
| |= | 비트 포함적 OR 후 대입 연산자입니다. 예: C |= 2 ≡ C = C | 2 |
6. 기타 연산자 (Miscellaneous Operators)
C++에는 위에서 소개한 연산자 외에도 프로그래밍 편의성을 높여주는 여러 특수 연산자들이 있습니다.
| 번호 | 연산자 및 설명 |
|---|---|
| 1 | sizeof 연산자: 변수의 크기(바이트)를 반환합니다. 예: sizeof(a), 여기서 'a'가 정수형이라면 4를 반환합니다. |
| 2 | 조건 연산자 (?:): 조건이 참이면 X의 값을, 거짓이면 Y의 값을 반환하는 삼항 연산자입니다. |
| 3 | 콤마 연산자: 일련의 연산을 순차적으로 수행하게 합니다. 콤마로 구분된 전체 표현식의 값은 마지막 표현식의 값이 됩니다. |
| 4 | 멤버 연산자 (. 과 →): 클래스, 구조체(structure), 공용체(union)의 개별 멤버에 접근할 때 사용합니다. |
| 5 | 캐스팅 연산자 (): 한 데이터 타입을 다른 타입으로 변환합니다. 예: int(2.2000) → 2 |
| 6 | 포인터 연산자 &: 변수의 메모리 주소를 반환합니다. 예: &a → 변수 a의 실제 주소 |
| 7 | 포인터 연산자 *: 변수를 가리키는 포인터입니다. 예: *var → var라는 변수를 가리킵니다. |
마무리
C++ 연산자는 프로그램의 기본적인 계산, 비교, 흐름 제어에 필수적인 요소입니다. 특히 비트 연산자와 복합 대입 연산자는 코드를 간결하게 만들고 성능 최적화에도 도움이 됩니다. 각 연산자의 동작 방식을 예제와 함께 직접 실습해 보면서 익혀두면 실제 개발에서 큰 도움이 될 것입니다.