본문 바로가기

카테고리 없음

연산자의 결합 규칙

연산자의 결합 규칙(Operator Precedence and Associativity)은 연산자가 여러 개 있을 때 연산의 순서를 결정합니다. 이 규칙은 복잡한 표현식을 해석할 때 중요합니다. 대부분의 프로그래밍 언어에서 연산자의 우선순위와 결합 규칙을 정의하여 수식의 평가 방법을 명확히 합니다.

1. 연산자의 우선순위 (Operator Precedence)
연산자의 우선순위는 여러 연산자가 있을 때 어떤 연산자를 먼저 수행할지를 결정합니다. 예를 들어, *와 + 연산자가 있는 수식에서, *가 +보다 우선적으로 계산됩니다.

일반적인 우선순위
괄호 (): 괄호 안의 표현식이 가장 먼저 평가됩니다.
지수 연산자 ^ 또는 **: 지수 연산 (제곱 등).
단항 연산자 +, -, ++, --, !, ~: 단일 피연산자에 대한 연산.
산술 연산자 *, /, %: 곱셈, 나눗셈, 나머지.
산술 연산자 +, -: 덧셈, 뺄셈.
비교 연산자 <, <=, >, >=, ==, !=: 비교 연산.
논리 연산자 &&, ||: 논리 AND, OR.
할당 연산자 =, +=, -=, *=, /=, %=: 변수에 값을 할당하거나 업데이트.
2. 결합 규칙 (Associativity)
결합 규칙은 동일한 우선순위를 가진 연산자가 여러 개 있을 때, 어느 방향으로 계산할지를 결정합니다. 일반적으로 두 가지 결합 규칙이 있습니다:

왼쪽에서 오른쪽으로 (Left-to-Right): 대부분의 연산자는 왼쪽에서 오른쪽으로 결합됩니다.
예: a - b + c는 (a - b) + c로 평가됩니다.
오른쪽에서 왼쪽으로 (Right-to-Left): 일부 연산자는 오른쪽에서 왼쪽으로 결합됩니다.
예: 할당 연산자 =는 오른쪽에서 왼쪽으로 결합됩니다. a = b = c는 a = (b = c)로 평가됩니다.
연산자의 우선순위와 결합 규칙 예제
C / C++ / Java / JavaScript 예제
c
코드 복사
#include <stdio.h>

int main() {
    int a = 10;
    int b = 5;
    int c = 2;
    
    // 연산자 우선순위와 결합 규칙
    int result1 = a + b * c;  // 곱셈이 덧셈보다 우선
    int result2 = a + (b * c);  // 결과는 동일, 괄호를 사용해도 우선순위에 영향 없음
    int result3 = a - b / c;  // 나눗셈이 뺄셈보다 우선
    int result4 = (a - b) / c;  // 괄호를 사용하여 먼저 뺄셈을 수행

    printf("a + b * c = %d\n", result1);  // 출력: 20
    printf("a + (b * c) = %d\n", result2);  // 출력: 20
    printf("a - b / c = %d\n", result3);  // 출력: 7
    printf("(a - b) / c = %d\n", result4);  // 출력: 2
    
    return 0;
}
Python 예제
python
코드 복사
a = 10
b = 5
c = 2

# 연산자 우선순위와 결합 규칙
result1 = a + b * c  # 곱셈이 덧셈보다 우선
result2 = a + (b * c)  # 결과는 동일, 괄호를 사용해도 우선순위에 영향 없음
result3 = a - b / c  # 나눗셈이 뺄셈보다 우선
result4 = (a - b) / c  # 괄호를 사용하여 먼저 뺄셈을 수행

print(f"a + b * c = {result1}")  # 출력: 20
print(f"a + (b * c) = {result2}")  # 출력: 20
print(f"a - b / c = {result3}")  # 출력: 7.0
print(f"(a - b) / c = {result4}")  # 출력: 2.5
주의사항
명확한 표현: 복잡한 수식에서는 괄호를 사용하여 명확하게 연산의 순서를 지정하는 것이 좋습니다. 괄호는 연산자 우선순위 규칙을 명확히 하며, 코드의 가독성을 높입니다.

언어의 차이: 언어마다 연산자의 우선순위와 결합 규칙이 다를 수 있습니다. 따라서 특정 언어에서 문서를 참조하거나 테스트하여 확인하는 것이 좋습니다.

연산자의 우선순위와 결합 규칙을 이해하면 복잡한 수식을 정확하게 해석하고, 예기치 않은 결과를 방지할 수 있습니다.