[ C언어 ] 13. 연산자 우선순위
Table of Contents
1. 개요
우리는 1 + 2 - 3 을 계산할 경우, 덧셈을 먼저 하고 그 다음 뻴셈을 합니다. 덧셈 뺄셈 연산을 할 때는, -> 방향으로 연산하기 때문이지요. 이러한 방향을 결합성이라고 합니다. 우선순위가 같은 연산끼리는 결합성에 따른 방향순으로 연산합니다.
그리고 1 + 2 * 3 를 계산할 경우, 우리는 곱셈을 먼저 계산하고 덧셈을 계산합니다. 이는 우리가 수학에서 곱하기의 연산이 덧셈의 연산보다 우선순위가 높다고 이미 배웠기 때문입니다.
사칙 연산은 괄호와 곱셈, 나눗셈만 주의하면 될 정도로 우선순위와 결합성이 간단하지만, C언어에는 사칙연산 이외에도 많은 연산자들이 존재하기 때문에 이 연산자들이 같이 사용될 경우 혼란이 있을 수 있습니다.
2. C언어 연산자들의 우선순위와 결합성
C언어에서도 한 번에 여러 개의 연산자를 사용할 경우, 우선순위에 따라 순서대로 처리하며 우선순위가 같은 연산자들끼리는 결합성의 방향대로 순서를 정합니다. 아래 표를 통해 연산자들의 우선순위와 결합성을 알 수 있습니다.
우선순위 (높을수록 우선) |
연산 |
결합성 |
16 |
[ ], ( ), x++, x-- |
-> |
15 |
&x, *x, ++x, --x, !x, ~x, sizeof(x), +x, -x |
<- |
14 |
(변환할 변수형) |
<- |
13 |
x*y, x/y, x%y |
-> |
12 |
x+y, x-y |
-> |
11 |
x<<y, x>>y |
-> |
10 |
x<y, x>y, x<=y, x>=y |
-> |
9 |
x==y, x!=y |
-> |
8 |
x&y |
-> |
7 | x^y | -> |
6 | x|y | -> |
5 | x&&y | -> |
4 | x||y | -> |
3 | x?y:z | <- |
2 | x=y, x*=y, x/=y, x%=y, x+=y, x-=y, x<<=y, x>>=y, x&=y, x^=y, x|=y | <- |
1 | , | -> |
우선순위가 뭐가 높은 지를 알아두면 좋지만, 필요할 때 찾아보면 되기 때문에 외우실 필요까진 없습니다. 사실, 잘 모를 경우엔 찾아보지 않고 괄호 ()를 통해 먼저 연산시키는 것이 보통입니다. 극단적인 예를 들어 곱하기가 더하기보다 우선순위가 높다는 게 기억이 안나더라도 1+(2*3) 이런식으로 괄호를 하면 알아서 괄호 안의 내용이 먼저 연산되는 점을 이용합니다. 따라서 자주 쓰는 연산자들에 대해서만 우선순위를 알고 있는 경우가 대부분입니다.