C에서 연산자 우선순위
안녕하세요, 열정적인 프로그래머 되시는 분들! 오늘 우리는 C 언어의 흥미로운 세계인 연산자 우선순위에 대해 다룰 것입니다. 프로그래밍에 새로운 분이라면 걱정 마세요 - 저는 여러분을 단계별로 안내해 드릴 것입니다. 여러분과 함께 이 여정을 시작해보겠습니다!
연산자 우선순위란?
상상해보세요, 주방에서 레시피를 따르고 있는 场景. 재료를 추가하고 작업을 수행하는 순서는 최종 요리에 큰 영향을 미칠 수 있습니다. 마찬가지로 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;
이 표현식을 평가하는 과정:
- 먼저
5 * 2
을 계산합니다 (10) - 그 다음
3 / 2
을 계산합니다 (1, 정수除法은 버림) - 마지막으로
10 + 10 - 1
을 계산하여 19가 됩니다
따라서 result
는 19가 됩니다.
예제 2: 산술 및 관계 연산자 혼합
int x = 5;
int y = 3;
int z = 2;
int result = x > y + z && y < x * z;
이를 풀어보면:
-
y + z
가 먼저 평가됩니다 (3 + 2 = 5) -
x * z
를 계산합니다 (5 * 2 = 10) -
x > y + z
는5 > 5
가 되어 거짓 (0) -
y < x * z
는3 < 10
가 되어 참 (1) - 마지막으로
0 && 1
이 평가되어 거짓 (0)
따라서 result
는 0 (거짓)이 됩니다.
연산자 결합성
이제 우선순위를 다룰 수 있으므로 결합성에 대해 이야기해 보겠습니다. 연산자가 같은 우선순위를 가질 때, 결합성이 평가 순서를 결정합니다.
두 가지 종류의 결합성이 있습니다:
- 왼쪽 결합
- 오른쪽 결합
대부분의 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