💻프로그래밍 내용 정리/C++17
[C++ 1.1.5] 연산자(단항, 이항, 비트 연산자)
이이프
2022. 8. 15. 16:14
728x90
연산자
다음 표는 C++에서 변숫값 변경 용도로 가장 흔히 사용하는 연산자와 사용법이다.
= | 오른쪽의 값을 왼쪽의 표현식에 대입하는 이항 연산자. |
int i; i = 3; |
! | 표현식의 참/거직(또는 0이 아닌 값과 0)을 반전시키는 단항 연산자 |
bool b = !ture; bool b2 = !b; |
+ | 덧셈을 나타내는 이항 연산자 | int i = 3 + 2; int j = i + 5; int k = i + j; |
- * / |
뺄셈, 곱셈, 나눗셈을 나타내는 이항 연산자 | int i = 5 - 1; int j = 5 * 2; int k = j / i; |
% | 나눗셈의 나머지를 계산하는 이항 연산자. 모드, 모듈로 또는 나머지 연산자라 부른다. |
int remainder = 5 % 2; |
++ | 표현식의 값에 1을 더하는 단항 연산자. 표현식 뒤에 나오면 그 표현식의 결과 자체는 바뀌지 않고 다음 문장부터 1이 더해진 값이 적용된다.(사후 증가, 후행증가) 표현식 앞에 나오면 표현식의 결과에 바로 1을 더한 값이 반영된다(사전 증가. 선행 증가) |
i++ ++i; |
-- | 표현식의 값에서 1을 빼는 단항 연산자. 표현식의 앞에 붙거나(사전 감소, 선행감소) 뒤에 붙을때(사후 감소, 후행감소) 의 동작은 ++와 같다. |
i--; --i; |
+= | i = i = j의 축약 표현 | i += j; |
-= *= /= %= |
각각 다음 문장에 대한 축약 표현이다. i = i - j; i = i * j; i = i / j; i = i % j; |
i -= j; i *= j; i /= j; i %= j; |
& &= |
양쪽에 나온 표현식끼리 비트 단위 AND 연산을 수행한다. |
i = j & k; j &= k; |
| |= |
양쪽에 나온 표현식끼리 비트 단위 OR 연산을 수행한다. |
i = j | k; j |= k; |
<< >> <<= >>= |
왼쪽에 나온 표현식으로 비트값을 오른쪽에 나온 수만큼 왼쪽(<<) 또는 오른쪽(>>)으로 시프트 이동한다. | i = i << 1; i = i >> 4; i <<= 1; i >>= 4; |
^ ^= |
양쪽 표현식에 대해 비트 단위 XOR (베타적 논리합) 연산을 수행한다. |
i = i ^ j; i ^= j; |
다음 코드는 가장 자주 사용하는 변수 타입과 연산자를 사용하는 예이다.
int someInteger = 256;
short someShort;
long someLong;
float someFloat;
double someDouble;
someInteger++;
someInteger *= 2;
someShort = static_cast<short>(someInteger);
someLong = someShort * 10000;
someFloat = someLong + 0.785;
someDouble = static_cast<double>(someFloat) / 100000;
cout << someDouble << endl;
결과
C++ 컴파일러는 일정한 순서에 따라 표현식의 값을 계산한다.
예를 들어 연산자의 우선순위를 완벽히 암기하지 않는 한 다음과 같이 작성된 코드의 결과를 예측하기 힘들다.
int i = 34 + 8 * 2 + 21 / 7 % 2;
여기에 소괄호를 추가하면 연산의 실행 순서를 명확히 드러낼 수 있다.
int i = 34 + (8 * 2) + ((21 / 7) % 2);
코드를 직접 실행해보면 두 표현식 모두 i 값이 51로 같은 결과를 낸다는 것을 알 수 있다.
C++에서는 /, *, % 연산을 가장 먼저 수행하고, 그다음으로 덧셈과 뺄셈을 계산하고, 마지막으로 비트 연산을 수행한다.
우선순위가 같을 때는 왼쪽에서 오른쪽 순서로 계산한다.