컴공생의 다이어리
[c/c++] 연산자 우선순위(Operator Priority) 본문
연산자 우선순위(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 | , | 콤마 연산 | → |
'Development > C & C++' 카테고리의 다른 글
[c/c++] Ubuntu Makefile 만들기 (0) | 2021.06.01 |
---|---|
[c++] 원본 행렬(original matrix)과 전치 행렬(transposed matrix) (0) | 2021.03.28 |
[c] scanf 데이터 입력 (0) | 2021.03.16 |
[c++] 강력한 패스워드 만들기 (0) | 2021.02.17 |
[c++] 숫자로 주어진 시간을 텍스트로 변환 (0) | 2021.02.15 |