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;
'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 |