[C언어][초급] Chapter21. 연산자 우선순위와 괄호 사용 – 계산 순서를 정확히 이해하자
계산 순서가 달라지면 결과도 달라집니다
프로그래밍에서 여러 연산자가 한 줄에 함께 쓰일 때, 어떤 연산을 먼저 처리할지는 우선순위에 따라 결정됩니다.
이 순서를 잘못 이해하면 의도하지 않은 결과가 나올 수 있죠.
이번 글에서는 C언어에서의 **연산자 우선순위(Operator Precedence)**와 괄호의 사용법을 정리해보겠습니다.
● 왜 연산자 우선순위가 중요할까?
아래 두 줄의 코드를 비교해보세요.
int result1 = 3 + 4 * 2;
int result2 = (3 + 4) * 2;
결과는 어떻게 될까요?
- result1은 4 * 2 = 8 → 3 + 8 = 11
- result2는 (3 + 4) = 7 → 7 * 2 = 14
같은 숫자를 사용했지만 괄호의 유무와 연산 순서에 따라 결과가 달라진 것을 알 수 있습니다.
● 자주 사용하는 연산자의 우선순위 정리
우선순위 | 연산자 | 설명 |
1 | () | 괄호 |
2 | ++, --, !, (type) | 단항 연산자, 형 변환 등 |
3 | *, /, % | 곱셈, 나눗셈, 나머지 |
4 | +, - | 덧셈, 뺄셈 |
5 | ==, !=, <, > 등 | 관계 연산자 |
6 | &&, ` | |
7 | = | 대입 연산자 |
※ 숫자가 낮을수록 우선순위가 높습니다.
※ 연산자 우선순위가 같다면 왼쪽에서 오른쪽 순서로 계산됩니다.
● 괄호가 우선이다
괄호는 모든 연산보다 먼저 계산됩니다.
이 덕분에 우리는 복잡한 계산도 원하는 순서대로 처리할 수 있습니다.
int a = 2 + 3 * 4; // 결과: 14
int b = (2 + 3) * 4; // 결과: 20
● 예제 비교
int x = 10;
int y = 5;
int z = 2;
int result1 = x + y * z; // 곱셈 먼저: 10 + (5*2) = 20
int result2 = (x + y) * z; // 괄호 먼저: (10+5)*2 = 30
● 우선순위만 믿지 말고 괄호를 써야 하는 이유
프로그래머는 컴파일러가 아니라 사람입니다.
코드를 작성할 때 의도한 순서를 명확히 표현하고, 읽는 사람이 이해하기 쉽게 만드는 것이 더 중요합니다.
// 혼동 가능
if (a > 0 && b < 5 || c == 3)
// 명확하게!
if ((a > 0 && b < 5) || c == 3)
● 주의할 점
- 혼합 연산 시 우선순위가 헷갈린다면 반드시 괄호로 명확히 구분하세요.
- 논리 연산자(&&, ||)는 관계 연산자보다 나중에 실행됩니다.
- 괄호가 많을수록 명확하지만, 불필요하게 남용하지는 마세요.
연산자 우선순위는 C언어에서 정확한 계산을 위해 반드시 알아야 할 개념입니다.
하지만 코드를 명확하고 안전하게 작성하기 위해서는 괄호를 적절히 활용하는 습관이 훨씬 더 중요합니다.
실습 문제
아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.
문제 1
아래 코드의 실행 결과는 무엇일까요?
int result = 2 + 3 * 4;
printf("%d\n", result);
문제 2
괄호를 사용하여 위 코드의 계산 순서를 바꿔 2 + 3을 먼저 수행하고 결과가 20이 되도록 수정해보세요.
문제 3
다음 중 출력 결과가 서로 다른 코드는 무엇인가요?
A. int a = 6 + 2 * 3;
B. int a = (6 + 2) * 3;
문제 4
다음 코드의 출력 결과를 예상해보세요.
int x = 10, y = 5, z = 2;
int result = x - y - z;
printf("%d\n", result);
문제 5
다음 조건문 중 괄호를 적절히 사용하여 논리 흐름을 명확하게 수정하세요.
if (score >= 90 || score >= 80 && bonus == 1)
▶ 정답 확인하기
정답 1
결과: 14
설명: 곱셈이 먼저 → 3 * 4 = 12 → 2 + 12 = 14
정답 2
int result = (2 + 3) * 4; // 결과: 20
정답 3
정답: A, B는 서로 다른 결과
- A: 6 + 2 * 3 = 6 + 6 = 12
- B: (6 + 2) * 3 = 8 * 3 = 24
정답 4
결과: 3
설명: 10 - 5 = 5 → 5 - 2 = 3 (왼쪽에서 오른쪽으로 연산)
정답 5
if ((score >= 90) || (score >= 80 && bonus == 1))
설명: 논리 AND가 OR보다 우선이므로, 괄호로 전체 흐름을 명확히 해야 함