컴공생의 다이어리

[c/c++] 연산자 우선순위(Operator Priority) 본문

Development/C & C++

[c/c++] 연산자 우선순위(Operator Priority)

컴공 K 2021. 3. 18. 00:01

연산자 우선순위(Operator Priority)

result = 5 + 2 * 8 / 4 - 8;

수학에서 위의 result 값을 구하기 위해서는 곱셈과 나눈셈의 연산이 덧셈과 뺄셈보다 먼저 계산되어야 한다. c/c++에서도 곱셈과 나눈셈의 연산이 덧셈과 뺄셈보다 먼저 처리 된다. c/c++에서는 사칙 연산 말고도 많은 연산자가 있기 때문에 여러 개의 연산자가 일렬로 나열되어 있을 때, 어떤 연산자를 먼저 처리할지의 순서가 정해져 있는데 이것을 연산자 우선순위라고 한다.

result를 구하기 위해서 가장 우선순위가 높은 연산자는 곱셈 연산자(*)와 나눗셈 연산자(/)이고 그 다음으로 우선순위가 높은 연산자는 덧셈 연산자(+)와 뺄셈 연산자(-)이며 이 중에서 가장 우선순위가 낮은 연산자는 대입 연산자(=)이다. 따라서 곱셈과 나눗셈 연산을 먼저 처리하는데 곱셈 연산자와 나눗셈 연산자는 동등한 연산자 우선순위를 가지고 있다.

이렇게 동등한 연산자 우선순위를 가지고 있을 때에는 어느 방향으로(좌측에서 우측 또는 우측에서 좌측) 연산 처리를 진행할지를 결정하는 데 이것을 결합 방향이라고 한다. 곱셈과 나눗셈은 좌측에서 우측 방향(→)으로 연산을 처리한다. 따라서 먼저 2 * 8에 대한 연산 16을 계산한 후, 다음으로 16 / 4의 연산이 진행되어 결과 값으로 4가 된다. 그리고 덧셈과 뺄셈 연산자도 우선순위가 같고 결합 방향이 좌측에서 우측 방향(→)이므로 5 + 4을 연산하면 9가 되고 다시 9 - 8을 연산하면 1이 된다. 최종적으로 우선순위가 가장 낮은 대입 연산자(=)을 처리하는데 대입 연산자의 결합 방향은 우측에서 좌측 방향(←)이므로 우측에 있는 값 1을 변수 result에 대입한다.

 

 

연산자 우선순위 표

순위 연산기호 연산자 결합 방향
1 () 함수호출
[] 인덱스
-> 간접지정
. 직접지정
++(postfix) 후위증가
--(postfix) 후위감소
2 ++(prefix) 전위증가
--(prefix) 전위감소
sizeof 바이트 단위 크기 계산
~ 비트 단위 NOT
! 논리 NOT
-, + 부호 연산(음수와 양수의 표현)
& 주소 연산
* 간접지정 연산
3 (casting) 자료형 
4 *, /, % 곱셈, 나눗셈, 나머지 연산
5 +, - 덧셈, 뺄셈 연산
6 <<, >> 비트 연산
7 <, >, <=, >= 대소 비교
8 ==, != 동등 비교
9 & 비트 AND 연산
10 ^ 비트 XOR 연산
11 | 비트 OR 연산
12 && 논리 AND
13 || 논리 OR
14 ? : 조건 연산
15 =, +=, -=, *=, /=, %=,
<<=, >>=,&=, ^=, !=
대입 연산
16 , 콤마 연산

 

 

www.yes24.com/Product/Goods/92279451

 

코딩마법서 C/C++ STONE

미래 시대에서 바라는 인재는 어떤 언어 또는 기술을 배웠는가 보다는 문제가 주어졌을 때, 본인이 사용할 수 있는 언어(아무거나 상관없음)로 최적화된 정답을 만들어 낼 수 있는가에 더욱 더

www.yes24.com

728x90
Comments