본문 바로가기
Programming/C

[C언어] 연산자 - 연산자의 우선 순위와 결합 방향

by 고간디 2022. 4. 1.

연산자(Operator)란 프로그램에서 산술식이나 연산식을 표현하고 처리하기 위해 제공되는 다양한 기호를 의미합니다

연산자에는 산술 연산자, 대입 연산자, 증감 연산자, 비교 연산자, 논리 연산자, 비트 연산자 등이 있습니다

 


연산자의 우선 순위

프로그램에서 연산자가 한 번씩만 쓰이는 경우는 많지 않습니다

우리가 실생활에서 무언가를 계산할 때도 더하기, 뺄셈, 곱셈, 나눗셈 등 여러 과정을 거치게 됩니다

 

연산자의 우선 순위(Operator Precedence)는 수식 내에 여러 연산자가 함께 등장할 때, 어떤 연산자가 먼저 처리될 것인가를 결정합니다

우리는 초등학생 때 더하기, 뺄셈, 곱셈, 나눗셈이 함께 있는 수식을 계산할 때 왼쪽에서 오른쪽 방향으로 순서대로 계산한다고 배웠습니다

이때 곱셈과 나눗셈이 있다면 곱셈과 나눗셈 먼저 계산 후에 나머지 덧셈, 뺄셈을 했어요

 

프로그램도 마찬가지입니다

곱셈과 나눗셈이 있다면 곱셈과 나눗셈을 먼저 한 후에 더하기, 빼기가 진행됩니다

이 우선 순위는 괄호 ( )를 이용해서 순서를 변경할 수도 있습니다

printf(3 + 5 * 3);
printf((3 + 5) * 3);
18
24

 


연산자의 결합 방향

그러면 수식 내에 우선 순위가 같은 연산자가 둘 이상 있을 경우에는 어떻게 연산을 해야 할까요??

C언어에서 연산자의 우선 순위와 결합 방향을 표로 보겠습니다

우선 순위 연산자 설명 결합 방향
1 ++ 후위 증가 연산자 왼쪽에서 오른쪽으로
-- 후위 감소 연산자 왼쪽에서 오른쪽으로
() 함수 호출 왼쪽에서 오른쪽으로
[] 첨자 연산자 왼쪽에서 오른쪽으로
. 참조에 의한 선택 왼쪽에서 오른쪽으로
-> 포인터를 통한 선택 왼쪽에서 오른쪽으로
2 ! 논리 NOT 연산자 오른쪽에서 왼쪽으로
~ 비트 NOT 연산자 오른쪽에서 왼쪽으로
+ 양의 부호 (단항 연산자) 오른쪽에서 왼쪽으로
- 음의 부호 (단항 연산자) 오른쪽에서 왼쪽으로
++ 전위 증가 연산자 오른쪽에서 왼쪽으로
-- 전위 감소 연산자 오른쪽에서 왼쪽으로
(타입) 타입 캐스트 연산자 오른쪽에서 왼쪽으로
* 참조 연산자 (단항 연산자) 오른쪽에서 왼쪽으로
& 주소 연산자 (단항 연산자) 오른쪽에서 왼쪽으로
sizeof 크기 오른쪽에서 왼쪽으로
3 * 곱셈 연산자 왼쪽에서 오른쪽으로
/ 나눗셈 연산자 왼쪽에서 오른쪽으로
% 나머지 연산자 왼쪽에서 오른쪽으로
4 + 덧셈 연산자 (이항 연산자) 왼쪽에서 오른쪽으로
- 뺄셈 연산자 (이항 연산자) 왼쪽에서 오른쪽으로
5 << 비트 왼쪽 시프트 연산자 왼쪽에서 오른쪽으로
>> 부호 비트를 확장하면서 비트 오른쪽 시프트 왼쪽에서 오른쪽으로
6 < 관계 연산자 (보다 작은) 왼쪽에서 오른쪽으로
<= 관계 연산자 (보다 작거나 같은) 왼쪽에서 오른쪽으로
> 관계 연산자 (보다 큰) 왼쪽에서 오른쪽으로
>= 관계 연산자 (보다 크거나 같은) 왼쪽에서 오른쪽으로
7 == 관계 연산자 (와 같은) 왼쪽에서 오른쪽으로
!= 관계 연산자 (와 같지 않은) 왼쪽에서 오른쪽으로
8 & 비트 AND 연산자  왼쪽에서 오른쪽으로
9 비트 XOR 연산자 왼쪽에서 오른쪽으로 
10 | 비트 OR 연산자 왼쪽에서 오른쪽으로
11 && 논리 AND 연산자 왼쪽에서 오른쪽으로
12 || 논리 OR 연산자 왼쪽에서 오른쪽으로
13 ?: 삼항 조건 연산자 오른쪽에서 왼쪽으로
14 = 대입 연산자 및 복합 대입 연산자
(=, +=, -=, *=, , /=, %=, <<=, >>=, &=, ^=, |=)
오른쪽에서 왼쪽으로
15 , 쉼표 연산자 왼쪽에서 오른쪽으로

이렇게 표로 정리할 수 있는데 이 표 내용을 전부 외우기보다는 필요할 때마다 참고하는 것이 효과적입니다

각 연산자에 대해서도 분류해서 설명할 예정입니다

728x90
반응형

댓글