Programming/C

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

고간디 2022. 4. 1. 11:48

연산자(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
반응형