본문 바로가기
Program Language/c++

c++ 기초(연산자)

by 토담이아빠 2022. 12. 29.

연산자

 

이글은 "전문가를 위한 c++(개정4)" 학습한 내용을 직접 실습해보며 정리한 Review 글입니다.


연산자

 

c++ 연산자에는 단항(unary) 연산자, 이항(binary) 연산자, 삼항(ternary) 연산자가 있습니다. 가장 많이 쓰이는 연산자는 이항연산자로 =, +, -, *, %, /, +=, *=, /=, %=, &, &=, |, |=, <<, >>, <<=, >>=, ^, ^= 있습니다. 또 단항 연산자로는 !, ++, --,이 있고, 삼항연산자로는 [조건]?[동작1]:[동작2]로 표현되는 조건 연산자가 있습니다. 다음 표는 연산자의 종류와 사용 예를 나타내는 표입니다.


= 오른쪽 값을 왼쪽의 표현식에 대입하는 이항 연산자 Int i;
i = 3;
int j;
j = i;
! 표현식의 참/거짓(또는 0이 아닌 값과 0)을 반전시키는(보수를 구하는) 단항 연산자 bool b = !true;
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;
% 나눗셈의 나머지를 계산하는 이항 연산자, 모드(mod), 모듈로(modulo) 또는 나머지 연산자라 부른다.



int remainder = 5 % 2;   
++ 표현식의 값에 1을 더하는 단항 연산자, 이 연산자가 표현식 뒤에 나오면 그 표현식의 결과 자체는 바뀌지 않고 다음 문장부터 1이 더해진 값이 적용된다(사후 증가, 후행 증가, post-increment). 반면 이 연산자가 표현식 앞에 나오면 표현의 결과에 곧바로 1을 더한 값이 반영된다.(사전 증가, 선행 증가, pre-increment). i++;
++i;
-- 표현식의 값에서 1 빼는 단항 연산자. 표현식의 앞에 붙거나(사전 감소, 선행감소, pre-decrement) 뒤에 붙을 (사후 감소, 후행 감소, post-decrement) 동작은 ++ 비슷하다. 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;
&
&=
양쪽에 나온 표현식끼리 비트 단위(bitwise) AND 연산을 수행한다. i = j & k;
j &= k;
|
|=
양쪽에 나온 표현식끼리 비트 단위 OR 연산을 수행한다. i = j | k;
j |= k;
<<
>>
<<=
>>=
왼쪽에 나온 표현식의 비트값을 오른쪽에 나온 수만큼(<<)또는 오른쪽(>>)으로 시프트(shift, 이동)한다. i = i << 1;
i = i >> 4;
i <<= 1;
i >>= 4;
^
^=
양쪽 표현식에 대해 비트 단위 XOR(exclusive or, 베타적 논리합)연산을 수행한다. i = i ^ j;

연산자는 우선순위를 갖습니다. c++에서는 /, *, % 연산을 가장 먼저 수행하고 그 다음 덧셈, 뺄셈을 계산하고, 마지막으로 비트 연산을 수행합니다. 우선 순위가 같을 때는 왼쪽에서 오른쪽 순서로 계산합니다. 또 표현식에 소괄호를 넣으면 연산의 실행 순서를 명확히 드러낼 수 있습니다.(괄호안에 연산을 먼저 실행함) 


int i = 34 + (8 * 2) + ((21 / 7) % 2);

소괄호를 잘 활용하면 우선순위를 외우지 않아도 원하는 연산을 의도대로 정확히 할 수 있으니 적극활용하시기 바랍니다.

 

'Program Language > c++' 카테고리의 다른 글

C++ 기초(구조체)  (0) 2023.01.03
c++ 기초(enum)  (0) 2023.01.02
c++ 기초(리터럴 & 변수)  (0) 2022.12.26
c++ 기초(namespace)  (0) 2022.12.22
c++ 기초("Hello, World!")  (0) 2022.12.22

댓글