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에서 연산 순서는 다음과 같습니다.

  1. (5 - 3)
  2. ++num2
  3. 2 / 2
    • 2 / (5 - 3)
  4. 1 * 4
    • 2 / (5 - 3) * ++num2
  5. 10 + 4
    • 10 + 2 / (5 - 3) * ++num2

복잡해 보이지만 생각보다 간단합니다. 먼저 연산자 우선순위에 상관 없이 괄호부터 먼저 계산한 뒤 그리고 연산자 우선순위에 따라 순서대로 계산합니다. 그리고 *, /는 결합 방향이 → 이므로 왼쪽에서 오른쪽 순으로 계산하면 됩니다.

여기서는 괄호로 감싼 (5 - 3)이 먼저 계산됩니다. 그리고 연산자 우선순위가 가장 높은 ++ 증가 연산자(앞)가 계산된 뒤 *, /이 차례대로 계산됩니다. 마지막으로 연산자 우선순위가 가장 낮은 +가 계산되어 14가 나오게 됩니다.