24.3 결합 방향이 다른 연산자와 괄호 사용하기
이번에는 결합 방향이 다른 연산자를 좀 더 많이 사용해보겠습니다.
bracket_operation_associativity.c
#include <stdio.h> int main() { int num1; int num2 = 3; num1 = 10 + 2 / (5 - 3) * ++num2; // 괄호와 증가 연산자를 먼저 계산 printf("%d\n", num1); // 14 return 0; }
소스를 컴파일하기 전에 눈으로 계산식을 먼저 계산해보기 바랍니다. 그리고 생각한 결과와 실제 결과가 맞는지 확인해보세요.
실행 결과
14
10 + 2 / (5 - 3) * ++num2에서 연산 순서는 다음과 같습니다.
- (5 - 3)
- ++num2
- 2 / 2
- 2 / (5 - 3)
-
1 * 4
- 2 / (5 - 3) * ++num2
-
10 + 4
- 10 + 2 / (5 - 3) * ++num2
복잡해 보이지만 생각보다 간단합니다. 먼저 연산자 우선순위에 상관 없이 괄호부터 먼저 계산한 뒤 그리고 연산자 우선순위에 따라 순서대로 계산합니다. 그리고 *, /는 결합 방향이 → 이므로 왼쪽에서 오른쪽 순으로 계산하면 됩니다.
여기서는 괄호로 감싼 (5 - 3)이 먼저 계산됩니다. 그리고 연산자 우선순위가 가장 높은 ++ 증가 연산자(앞)가 계산된 뒤 *, /이 차례대로 계산됩니다. 마지막으로 연산자 우선순위가 가장 낮은 +가 계산되어 14가 나오게 됩니다.