Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 연산자 우선순위와 결합 방향 완벽 정리

C++ 연산자 우선순위란?

연산자 우선순위(precedence)는 하나의 표현식 안에서 항들이 어떻게 묶이는지를 결정하는 규칙입니다. 반면 결합성(associativity)은 괄호가 없을 때 동일한 우선순위를 가진 연산자들이 어느 방향부터 그룹화되어 평가되는지를 정하는 속성입니다. 이 두 가지 규칙은 표현식이 실제로 어떤 순서로 계산되는지에 직접적인 영향을 미칩니다.

모든 연산자가 같은 우선순위를 갖는 것은 아닙니다. 예를 들어 곱셈 연산자(*)는 덧셈 연산자(+)보다 높은 우선순위를 가집니다.

예제로 이해하기

x = 7 + 3 * 2;

위 코드에서 x에는 20이 아니라 13이 할당됩니다. 그 이유는 * 연산자가 + 연산자보다 우선순위가 높아 먼저 3 * 2 = 6이 계산되고, 이후 7 + 6 = 13이 되기 때문입니다.

C++ 연산자 우선순위 표

아래 표에서 상단에 위치한 연산자일수록 우선순위가 높고, 하단에 있을수록 우선순위가 낮습니다. 하나의 표현식 안에서는 우선순위가 높은 연산자부터 먼저 평가됩니다.

분류연산자결합 방향
후위(Postfix)() [] -> . ++ --왼쪽 → 오른쪽
단항(Unary)+ - ! ~ ++ -- (type) * & sizeof오른쪽 → 왼쪽
곱셈(Multiplicative)* / %왼쪽 → 오른쪽
덧셈(Additive)+ -왼쪽 → 오른쪽
시프트(Shift)<< >>왼쪽 → 오른쪽
관계(Relational)< <= > >=왼쪽 → 오른쪽
동등(Equality)== !=왼쪽 → 오른쪽
비트 AND(Bitwise AND)&왼쪽 → 오른쪽
비트 XOR(Bitwise XOR)^왼쪽 → 오른쪽
비트 OR(Bitwise OR)|왼쪽 → 오른쪽
논리 AND(Logical AND)&&왼쪽 → 오른쪽
논리 OR(Logical OR)||왼쪽 → 오른쪽
조건(Conditional)?:오른쪽 → 왼쪽
대입(Assignment)= += -= *= /= %= >>= <<= &= ^= |=오른쪽 → 왼쪽
쉼표(Comma),왼쪽 → 오른쪽

활용 팁

동일한 우선순위의 연산자가 여러 개 함께 나타나면 위 표의 결합 방향(왼쪽 → 오른쪽 또는 오른쪽 → 왼쪽)에 따라 평가 순서가 결정됩니다. 특히 대입 연산자와 조건 연산자(?:)는 오른쪽에서 왼쪽으로 결합된다는 점을 기억해 두면 유용합니다. 복잡한 표현식에서는 의도하지 않은 계산 순서로 인한 버그를 피하기 위해 괄호 ()를 명시적으로 사용해 우선순위를 분명히 드러내는 것이 좋은 코딩 습관입니다.