C에서 연산자 우선순위

안녕하세요, 열정적인 프로그래머 되시는 분들! 오늘 우리는 C 언어의 흥미로운 세계인 연산자 우선순위에 대해 다룰 것입니다. 프로그래밍에 새로운 분이라면 걱정 마세요 - 저는 여러분을 단계별로 안내해 드릴 것입니다. 여러분과 함께 이 여정을 시작해보겠습니다!

C - Operator Precedence

연산자 우선순위란?

상상해보세요, 주방에서 레시피를 따르고 있는 场景. 재료를 추가하고 작업을 수행하는 순서는 최종 요리에 큰 영향을 미칠 수 있습니다. 마찬가지로 C 프로그래밍에서도 연산이 수행되는 순서는 코드의 결과에 큰 영향을 미칩니다. 이때 연산자 우선순위가 등장합니다.

연산자 우선순위는 표현式中 다양한 연산자가 평가되는 순서를 결정하는 것입니다. 이는 컴파일러가 어떤 연산을 먼저 수행해야 할지 결정하는 규칙과 같습니다.

간단한 예를 보겠습니다:

int result = 5 + 3 * 2;

result의 값을 예상해보세요. 11이라고 맞추셨나요? 그렇다면 정답입니다! 하지만 왜 그런 걸까요?

곱셈 연산자 *은 덧셈 연산자 +보다 높은 우선순위를 가지고 있습니다. 따라서 3 * 2가 먼저 평가되어 6이 되고, 그 다음에 5를 더합니다.

연산의 순서를 바꾸고 싶다면 괄호를 사용할 수 있습니다:

int result = (5 + 3) * 2;

이제 result는 16이 됩니다. 괄호가 덧셈을 먼저 수행하도록 강제하기 때문입니다.

우선순위 표

C에서 다양한 연산자의 우선순위를 기억하는 데 도움을 드리기 위해 표를 보여드리겠습니다. 표에서 더 높은 위치에 있는 연산자는 더 높은 우선순위를 가집니다.

우선순위 연산자 설명
1 () [] -> . 괄호, 배열 서브스크립트, 멤버 접근
2 ! ~ ++ -- + - * & (type) sizeof 일반 연산자, sizeof, 형 변환
3 * / % 곱셈,除法, 나머지
4 + - 덧셈, 뺄셈
5 << >> 비트 이동 왼쪽, 비트 이동 오른쪽
6 < <= > >= 관계 연산자
7 == != 동등성 연산자
8 & 비트 AND
9 ^ 비트 XOR
10 | 비트 OR
11 && 논리 AND
12 || 논리 OR
13 ?: 조건 연산자
14 = += -= *= /= %= &= ^= = <<= >>=
15 , 쉼표 연산자

이 표가 복잡하게 보이지만, 예제를 통해 하나씩 풀어보겠습니다!

연산자 우선순위 예제

연산자 우선순위가 실제 어떻게 작동하는지 몇 가지 예제를 통해 이해해 보겠습니다.

예제 1: 산술 연산자

int result = 10 + 5 * 2 - 3 / 2;

이 표현식을 평가하는 과정:

  1. 먼저 5 * 2을 계산합니다 (10)
  2. 그 다음 3 / 2을 계산합니다 (1, 정수除法은 버림)
  3. 마지막으로 10 + 10 - 1을 계산하여 19가 됩니다

따라서 result는 19가 됩니다.

예제 2: 산술 및 관계 연산자 혼합

int x = 5;
int y = 3;
int z = 2;
int result = x > y + z && y < x * z;

이를 풀어보면:

  1. y + z가 먼저 평가됩니다 (3 + 2 = 5)
  2. x * z를 계산합니다 (5 * 2 = 10)
  3. x > y + z5 > 5가 되어 거짓 (0)
  4. y < x * z3 < 10가 되어 참 (1)
  5. 마지막으로 0 && 1이 평가되어 거짓 (0)

따라서 result는 0 (거짓)이 됩니다.

연산자 결합성

이제 우선순위를 다룰 수 있으므로 결합성에 대해 이야기해 보겠습니다. 연산자가 같은 우선순위를 가질 때, 결합성이 평가 순서를 결정합니다.

두 가지 종류의 결합성이 있습니다:

  1. 왼쪽 결합
  2. 오른쪽 결합

대부분의 C 연산자는 왼쪽 결합이지만, 할당 연산자와 같은 일부 연산자는 오른쪽 결합입니다.

왼쪽 결합 예제

int a = 10 - 5 - 3;

이는 (10 - 5) - 3으로 평가되어 2가 됩니다.

오른쪽 결합 예제

int x, y, z;
x = y = z = 5;

이는 x = (y = (z = 5))으로 평가되어 세 가지 변수에 모두 5가 할당됩니다.

후위/전위 증가/감소 연산자의 우선순위

이제 어려운 주제로 이동해보겠습니다: 증가와 감소 연산자. 이 연산자는 전위 (before the variable)와 후위 (after the variable) 두 가지 방식으로 사용될 수 있습니다.

  • 전위: ++x 또는 --x
  • 후위: x++ 또는 x--

전위 버전은 후위 버전보다 더 높은 우선순위를 가집니다. 코드에서 어떻게 작동하는지 보겠습니다:

int x = 5;
int y = ++x * 2;

여기서 x는 6으로 증가한 후 곱셈이 이루어지므로 y는 12가 됩니다.

이제 후위 버전으로 변경해보겠습니다:

int x = 5;
int y = x++ * 2;

이 경우 x는 곱셈 이전에 사용되므로 y는 10이 되고, x는 6이 됩니다.

재미있는 비유

전위 증가는 집을 나가기 전에 신발을 신는 것과 같고, 후위 증가는 집을 나간 후 신발을 신는 것과 같습니다. 전위는 즉시 작업을 수행하고, 후위는 주요 작업 후에 작업을 수행합니다.

결론

연산자 우선순위와 결합성을 이해하는 것은 올바르고 효율적인 C 프로그램을 작성하는 데 필수적입니다. 이는 새로운 언어의 문법을 배우는 것과 같아 처음에는 복잡할 수 있지만, 연습을 통해 자연스러워집니다.

의도를 명확히 하기 위해 괄호를 사용하는 것을 잊지 마세요. 이는 코드가 기대대로 동작하도록 보장하고, 다른 사람 (그리고 미래의 당신)이 코드를 읽기 쉽게 만듭니다.

계속 연습하면 곧 C 연산자를 마스터 셰프처럼 자유자재로 다룰 수 있을 것입니다 - 완벽한 결과를 위해 각 재료를 적절한 시간에 추가하죠!

Credits: Image by storyset