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

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

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

연산자 우선순위(operator precedence)는 표현식에서 항(term)들이 어떻게 묶여 평가되는지를 결정하는 규칙입니다. 또한 결합 방향(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
&
왼쪽 → 오른쪽
비트 XOR
^
왼쪽 → 오른쪽
비트 OR
|
왼쪽 → 오른쪽
논리 AND
&&
왼쪽 → 오른쪽
논리 OR
||
왼쪽 → 오른쪽
조건(Conditional)
?:
오른쪽 → 왼쪽
대입(Assignment)
= += -= *= /= %= >>= <<= &= ^= |=
오른쪽 → 왼쪽
쉼표(Comma)
,
왼쪽 → 오른쪽

실무 팁: 괄호를 활용하세요

연산자 우선순위를 모두 외우지 않더라도 괄호()를 사용하면 의도한 계산 순서를 명확하게 지정할 수 있습니다. 복잡한 표현식에서는 괄호를 적극적으로 활용하는 것이 코드의 가독성과 유지보수성을 높이는 좋은 습관입니다.