프로그래밍언어/C언어[초급]

[C언어][초급] Chapter21. 연산자 우선순위와 괄호 사용 – 계산 순서를 정확히 이해하자

about_IT 2025. 4. 16. 19:56
728x90

계산 순서가 달라지면 결과도 달라집니다
프로그래밍에서 여러 연산자가 한 줄에 함께 쓰일 때, 어떤 연산을 먼저 처리할지는 우선순위에 따라 결정됩니다.
이 순서를 잘못 이해하면 의도하지 않은 결과가 나올 수 있죠.

이번 글에서는 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)

● 주의할 점

  1. 혼합 연산 시 우선순위가 헷갈린다면 반드시 괄호로 명확히 구분하세요.
  2. 논리 연산자(&&, ||)는 관계 연산자보다 나중에 실행됩니다.
  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보다 우선이므로, 괄호로 전체 흐름을 명확히 해야 함

728x90