Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 연산자 완벽 가이드: 산술부터 비트 연산까지 한눈에 보기

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++에는 위에서 소개한 연산자 외에도 프로그래밍 편의성을 높여주는 여러 특수 연산자들이 있습니다.

번호연산자 및 설명
1sizeof 연산자: 변수의 크기(바이트)를 반환합니다. 예: sizeof(a), 여기서 'a'가 정수형이라면 4를 반환합니다.
2조건 연산자 (?:): 조건이 참이면 X의 값을, 거짓이면 Y의 값을 반환하는 삼항 연산자입니다.
3콤마 연산자: 일련의 연산을 순차적으로 수행하게 합니다. 콤마로 구분된 전체 표현식의 값은 마지막 표현식의 값이 됩니다.
4멤버 연산자 (. 과 →): 클래스, 구조체(structure), 공용체(union)의 개별 멤버에 접근할 때 사용합니다.
5캐스팅 연산자 (): 한 데이터 타입을 다른 타입으로 변환합니다. 예: int(2.2000) → 2
6포인터 연산자 &: 변수의 메모리 주소를 반환합니다. 예: &a → 변수 a의 실제 주소
7포인터 연산자 *: 변수를 가리키는 포인터입니다. 예: *var → var라는 변수를 가리킵니다.

마무리

C++ 연산자는 프로그램의 기본적인 계산, 비교, 흐름 제어에 필수적인 요소입니다. 특히 비트 연산자와 복합 대입 연산자는 코드를 간결하게 만들고 성능 최적화에도 도움이 됩니다. 각 연산자의 동작 방식을 예제와 함께 직접 실습해 보면서 익혀두면 실제 개발에서 큰 도움이 될 것입니다.