💻프로그래밍 내용 정리/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++에서는 /, *, % 연산을 가장 먼저 수행하고, 그다음으로 덧셈과 뺄셈을 계산하고, 마지막으로 비트 연산을 수행한다.

우선순위가 같을 때는 왼쪽에서 오른쪽 순서로 계산한다.