C++

C++ 연산자(Operator) 총정리

김구티2 2024. 3. 9. 09:10

1. 연산자의 개념

연산자는 수학적 또는 논리적 계산을 수행하기 위한, 어떤 값에 대해 연산하는 기호다. 이 연산자라는 것은 모든 프로그래밍 언어의 기초를 형성한다. C++에는 필요한 기능을 제공하기 위한 연산자가 내장되어 있다.

 

연산자는 피연산자를 연산한다. 예를 들면,

int c = a + b;

여기서 +는 덧셈 연산자다. 그리고 a와 b는 덧셈이 되는 피연산자인 것이다.

2. 연산자의 분류

C++에서 연산자는 총 6가지로 분류할 수 있다.

① 산술 연산자
② 관계 연산자
③ 논리 연산자
④ 비트 연산자
⑤ 할당 연산자
⑥ 삼항 연산자 또는 조건 연산자

 

① 산술 연산자(Arithmetic Operators)

이러한 연산자는 피연산자에 대한 산술 연산이나 수학 연산을 수행하는 데 사용된다. 예를 들어 덧셈에는 +, 뺄셈에는 -, 곱셈 등에는 *가 사용된다. 이는 C++를 전혀 모르더라도 이미 우리에게 친숙한 연산자다.

그런데 산술 연산자는 또 2가지 유형으로 분류할 수 있다.

⑴ 단항 연산자: 이러한 연산자는 단일 피연산자로 작동한다. 예를 들어, 증분(++) 및 감소(--) 연산자가 이에 속한다. ++는 정수 값을 1씩 증가시키는 연산자고, --는 정수 값을 1씩 감소시키는 연산자다.

따라서 int a = 5; 라고 했을 때

a++는 6이 되고, a--는 4가 되는 것이다.

 

그런데 여기서 문제가 되는 건 ++a와 --a의 등장이다. ++a와 a++는 다르고, --a와 a--도 분명 다르다.

++a와 a++로 설명을 하면, ++a에서는 변수의 값이 먼저 증가한 다음 프로그램에 사용된다. 반면, a++에서는 변수의 값이 먼저 할당되고 그 다음에 증가한다. 감소 연산자에서도 이와 동일하다.

 

⑵ 이진 연산자: 이러한 연산자는 두 개의 피연산자와 함께 작동한다. 덧셈 +, 뺄셈 -, 곱셈 *, 나눗셈 /, 나머지 연산 %이 이에 속한다. 여기서 나머지 연산자는 반드시 정수와 함께 사용해야 한다는 것만 주의한다.

 

② 관계 연산자(Relational Operators)

이러한 연산자는 두 피연산자의 값을 비교하는 데 사용된다. 예를 들어, >는 한 피연산자가 다른 피연산자보다 큰지 아닌지 등을 확인한다. 결과로는 불 값, 즉 true 또는 false를 반환한다. 그리고 true는 1로, false는 0으로 표기된다. 관계 연산자의 결과값은 언제나 0 또는 1이라는 말이다.

==: 두 피연산자가 동일한지 확인

>: 첫 번째 피연산자가 두 번째 피연산자보다 큰지 확인

>= : 첫 번째 피연산자가 두 번째 피연산자보다 크거나 같은지 확인

<: 첫 번째 피연산자가 두 번째 피연산자보다 작은지 확인

<= : 첫 번째 피연산자가 두 번째 피연산자보다 작거나 같은지 확인

!=: 두 피연산자가 다른지 확인

 

③ 논리 연산자(Logical Operators)

이러한 연산자는 둘 이상의 조건 또는 제약 조건을 결합하거나 원래 조건의 평가를 고려하여 보완하는 데 사용된다. 결과는 불 값, 즉 true 또는 false를 반환한다. 관계 연산자와 마찬가지로 1 또는 0 값으로 표기된다.

&&: 모든 피연산자가 true이거나 0이 아닌 경우에만 true(=1)를 반환한다.

||: 피연산자 중 하나가 true이거나 0이 아닌 경우 true(=1)를 반환한다.

!: 피연산자가 거짓이거나 0이면 true(=1)를 반환한다.

 

예시:

int a = 3, b = 6;
a&&b; // returns true

a||b; // returns true

!a; // returns false

 

④ 비트 연산자(Bitwise Operators)

이 연산자들은 피연산자들에 대해 비트 레벨 연산을 수행하는 데 사용된다. 연산자들은 먼저 비트 레벨로 변환된 다음, 피연산자들에 대해 계산이 수행된다. 더 빠른 처리를 위해 비트 레벨에서 덧셈, 뺄셈, 곱셈 등의 수학적 연산을 수행할 수 있다.

&: 대응되는 비트가 모두 1이면 1을 반환한다. AND 연산을 떠올리면 된다.

|: 대응되는 비트 중 하나라도 1이면 1을 반환한다. OR 연산을 떠올리면 된다.

^: 대응되는 비트가 서로 다르면 1을 반환한다. XOR 연산을 떠올리면 된다.

<<: 지정한 수만큼 비트를 전부 왼쪽으로 이동시킨다. LEFT SHIFT 연산을 떠올리면 된다.

>>: 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킨다. RIGHT 연산을 떠올리면 된다.

~: 비트가 1이면 0으로, 0이면 1로 반전시킨다. NOT 연산을 떠올리면 된다.

 

예시:

// CPP Program to demonstrate the Bitwise Operators
#include <iostream>
using namespace std;

int main()
{
     int a = 6, b = 4;

     // Binary AND operator
     cout << "a & b is " << (a & b) << endl;

     // Binary OR operator
     cout << "a | b is " << (a | b) << endl;

     // Binary XOR operator
     cout << "a ^ b is " << (a ^ b) << endl;

     // Left Shift operator
     cout << "a<<1 is " << (a << 1) << endl;

     // Right Shift operator
     cout << "a>>1 is " << (a >> 1) << endl;

     // One’s Complement operator
     cout << "~(a) is " << ~(a) << endl;

     return 0;
}

 

출력:

a & b is 4
a | b is 6
a ^ b is 2
a<<1 is 12
a>>1 is 3
~(a) is -7


⑤ 할당 연산자

이 연산자들은 변수에 값을 할당하는 데 사용된다. 할당 연산자의 좌측 피연산자는 변수고, 우측 피연산자는 값이다. 우측에 있는 값은 좌측에 있는 변수와 동일한 데이터 유형이어야만 한다. 그렇지 않으면 컴파일러는 오류를 발생시킬 것이다.

=: 오른쪽의 값을 왼쪽 변수에 할당한다.

+: 먼저 왼쪽에 있는 변수의 현재 값을 오른쪽에 있는 값에 더한 다음, 결과를 왼쪽에 있는 변수에 할당한다.

ex) int a=2, b=4; a+=b; // a=6

-=:  먼저 왼쪽에 있는 변수의 현재 값에서 오른쪽에 있는 값을 뺀 다음, 결과를 왼쪽에 있는 변수에 할당한다.

× =: 먼저 왼쪽에 있는 변수의 현재 값을 오른쪽에 있는 값에 곱한 다음, 결과를 왼쪽에 있는 변수에 할당한다.

ex) int a=2, b=4; a*=b; // a=8

/ =: 먼저 왼쪽에 있는 변수의 현재 값을 오른쪽에 있는 값으로 나눈 다음, 결과를 왼쪽에 있는 변수에 할당한다.

 

예시:

// CPP Program to demonstrate the Assignment Operators
#include <iostream>
using namespace std;

int main()
{
     int a = 6, b = 4;

     // Assignment Operator
     cout << "a = " << a << endl;

     // Add and Assignment Operator
     cout << "a += b is " << (a += b) << endl;

     // Subtract and Assignment Operator
     cout << "a -= b is " << (a -= b) << endl;

     // Multiply and Assignment Operator
     cout << "a *= b is " << (a *= b) << endl;

     // Divide and Assignment Operator
     cout << "a /= b is " << (a /= b) << endl;

     return 0;
}

 

출력:

a = 6
a += b is 10
a -= b is 6
a *= b is 24
a /= b is 6

 

⑥ 삼항 연산자 또는 조건 연산자

Expression1? Expression2: Expression3

이 연산자는 조건에 따라 값을 반환한다. 삼항 연산자는 첫 번째로 식1의 평가를 바탕으로 답을 결정한다. 만약 참이면, 식2로 넘어가 식의 정답으로 사용된다. 그러나 식1이 거짓이면, 식 3으로 넘어가 식의 정답으로 사용된다. if else의 개념으로 이해하면 더욱 받아들이기 쉽다.

 

예시:

// CPP Program to demonstrate the Conditional Operators
#include <iostream>
using namespace std;

int main()
{
     int a = 3, b = 4;

     // Conditional Operator
     int result = (a < b) ? b : a;
     cout << "The greatest number is " << result << endl;

     return 0;
}

 

출력:

The greatest number is 4

 

⑦ 기타 연산자

위에서 설명한 연산자 외에, C++에서 사용할 수 있는 다른 일반적인 연산자가 있다.

 

⑴ sizeof 연산자

이 연산자는 피연산자의 크기를 바이트 단위로 반환하는 데 사용된다.

sizeof(char); // returns 1

 

⑵ 콤마 연산자

이 2진 연사자는 첫 번째 피연산자를 평가하고 결과를 폐기하는 데 사용되며, 두 번째 피연산자를 평가하고 이 값(및 유형)을 반환한다. 이 연산자는 다양한 표현식을 함께 결합하는 데 사용된다.

int a = 6;
int b = (a+1, a-2, a+5); // b = 11

 

⑶ → 연산자

이 연산자는 클래스 또는 구조의 변수에 엑세스하는 데 사용된다.

cout<<emp→first_name;

 

⑷ cast 연산자

한 데이터의 유형을 다른 데이터의 유형으로 변환하는 데 사용된다.

float a = 11.567;
int c = (int) a; // returns 11

 

⑸ 닷(.) 연산자

이 연산자는 C++에서 구조 변수 또는 클래스 객체의 멤버에 엑세스하는 데 사용된다.

cout<<emp.first_name;

 

⑹ & 연산자

포인터 연산자이며, 피연산자의 메모리 주소를 나타내는 데 사용된다.

 

⑺ * 연산자

방향 연산자이다.

 

예시:

// CPP Program to demonstrate the & and * Operators
#include <iostream>
using namespace std;

int main()
{
     int a = 6;
     int* b;
     int c;
     // & Operator
     b = &a;

     // * Operator
     c = *b;
     cout << " a = " << a << endl;
     cout << " b = " << b << endl;
     cout << " c = " << c << endl;

     return 0;
}

 

출력:

a = 6
b = 0x7ffe8e8681bc
c = 6

 

⑻ << 연산자

삽입 연자라고도 불린다. 출력을 프린트하기 위해 cout과 함께 사용된다.

 

⑼ >> 연산자

추출 연산자라고도 불린다. 입력을 얻기 위해 cin과 함께 사용된다.

int a;
cin>>a;
cout<<a;

728x90

'C++' 카테고리의 다른 글

C++에서 cout 총정리  (0) 2024.03.09
C++에서 cin 총정리  (0) 2024.03.09
C++ if else문 총정리  (0) 2024.03.08
C++ if문 총정리  (0) 2024.03.08
C++ 데이터 타입 총정리  (0) 2024.02.21