연산자(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
반응형
'Programming > C' 카테고리의 다른 글
[C언어] 연산자 - 증감 연산자와 비교 연산자 (0) | 2022.04.01 |
---|---|
[C언어] 연산자 - 산술 연산자와 대입 연산자 (0) | 2022.04.01 |
[C언어] 데이터 타입 (자료형) (0) | 2022.03.31 |
[C언어] 변수와 상수 (0) | 2022.03.31 |
[C언어] 이스케이프 시퀀스, 서식 지정자 (0) | 2022.03.31 |
댓글