이번 포스팅에서는 C++의 기본 연산자들에 대해서 다뤄볼 것이다. 연산자에는 대수 연산자(Arithmetic operator), 논리 연산자(Logical operator), 비트 연산자(Bitwise operator)가 있다. 연산자 재정의라던가 등등은 나중에 다룰 것이다.
목차
1. 대수 연산자(Arithmetic Operator)
2. 논리 연산자(Logical Operator)
3. 비교 연산자(Comparison Operator)
4. 증감 연산자(Increment/Decrement Operator)
5. 비트 연산자(Bitwise Operator)
6. 할당 연산자(Assignment Operator)
7. 삼항 연산자
만약 정수형으로 / 연산을 한다면, 정수형의 몫이 나오며, 실수형으로 / 연산을 한다면 실수형의 몫이 나온다. 이 점을 유념해야 한다. 또한 나누는 수가 0이 되면 DividedByZero 오류가 발생하게 된다.
int a = 5, b= 3;
cout<<a/b<<endl; // 1이 출력된다.
float a = 5.0, b= 3.0;
cout<<a/b<<endl; // 1.66667이 출력된다.
전위형 : 값을 증가시키고 사용하기
후위형 : 값을 사용하고 증가시키기int a = 1; int b = ++a; // b=2, a=2 int c = a++; // a=2, c=1
비트 연산자는 이진수 비트 수준에서의 연산을 의미한다.
이진수는 컴퓨터 시스템에서 데이터를 표현하기 위해 사용되는 가장 기본적인 수 체계로, 0과 1 2가지 숫자로만 나타낸다. 이를 기반으로 하는 진법 체계가 이진법으로, 각 자릿수는 2이 제곱으로 구성된다. 예를 들면 다음과 같다.
이진수 1011은 왼쪽에서 오른쪽으로 십진법으로 해석하면
2^3 x 1 + 2^2 x 0 + 2^1 x 1 + 2^0 +1 = 11이다.
컴퓨터에서는 보통 데이터를 바이트 단위로 처리하며, 1바이트는 8비트를 값으로 갖는다. 따라서 예를 들면
10진수 5는 8비트 2진수로 00000101이다.
10진수 13은 8비트 2진수로 00001101이다.
이제 비트 연산자를 좀 더 폭 넓게 이해할 수 있을 것이다.
비트 AND 연산자로, 두 비트가 1일 때 결과가 1이며, 그렇지 않을 경우 0으로 처리한다.
int a = 5; // 이진수 00000101
int b = 13; // 이진수 00001101
int result = a & b; // 이진수로 00000101 (10진수로 5)
비트 OR 연산자로, 두 비트 중 하나로도 1이면 1로 처리한다.
int a = 5; // 이진수로 00000101
int b = 13; // 이진수로 00001101
int result = a | b; // 이진수로 00001101 (10진수로 13)
비트 XOR 연산자로, 두 비트가 서로 다를 때 1이 되고, 같으면 0이 된다.
int a = 5; // 이진수로 00000101
int b = 13; // 이진수로 00001101
int result = a ^ b; // 이진수로 00001000 (10진수로 8)
연산 과정을 나타내면 다음과 같다.
00000101 (5)
^ 00001101 (13)
-----------
00001000 (8)
비트 NOT 연산자로, 비트를 반전시킨다. 0을 1로, 1을 0으로 반전한다.
int a = 5; // 이진수로 00000101
int result = ~a; // 이진수로 11111010 (2의 보수 체계에서는 -6을 의미)
연산 과정은 다음과 같다.
~ 00000101 (5)
-----------
11111010 (-6)
💡 2의 보수 체계(Two's Complement)
컴퓨터에서 정수, 특히 음수를 표현하게 해준다. 다음 절차를 따른다.
.
1. 비트 반전: 숫자의 모든 비트를 반전시킨다.
2. 1을 더한다.
.
예를 들어서 5를 4비트로 표현하면 0101이다. 이때 -5를 이진법으로 나타내려면
.
1. 0101을 반전시킨다(1010)
2. 1을 더한다(1011)
.
따라서 -5는 1011로 쓸 수 있다.
비트 왼쪽 시프트 연산자로, 비트들을 왼쪽으로 이동한다. 이동시키고 남는 자리에는 0을 채우게 된다. 주로 곱셈 용도로 사용한다.
int a = 5; // 이진수로 00000101
int result = a << 1; // 이진수로 00001010 (10진수로 10)
연산 과정은 다음과 같다.
00000101 (5)
<< 1
-----------
00001010 (10)
int a = 5; // 이진수로 00000101
int result = a >> 1; // 이진수로 00000010 (10진수로 2)
연산과정은 다음과 같다.
00000101 (5)
>> 1
-----------
00000010 (2)
변수에 값을 할당하는 연산자들이다.
(조건)?(첫번째 수행문):(두번째 수행문)
만약 조건이 참이라면, 첫번째 수행문이 실행되어 결과가 출력된다. 반대로, 조건이 거짓이라면 두번째 수행문이 실행된다.