3.12 연산자 우선 순위와 결합 방향 [doc] [smts]
3.12.1 연산자 우선 순위
한 수식에 여러 개의 연산자를 사용하는 경우에 연산자들의 우선순위를 고려하지 않을 수 없다. 연산자 우선순위를 정리하면 다음과 같다.
- 괄호, 배열, 구조체, 공용체멤버를 나타내는 지시자 (), [], ->, . 은 우선순위가 가장 높다. 
- 한 개의 피연산자를 갖는 단항연산자(!, ++, -- 등)이 그 다음으로 우선순위가 높다. 
- 그 다음은 산술 연산자 (+, - *, /, %)이다. 
- 쉬프트연산자와 비교연산자는 비트연산자보다 연산순위가 높다. 
- 맨 하위에 대입연산자와 콤마(,)연산자가 있다. 
[표 3.12.1] 연산자 우선 순위와 결합 방향
| 순위 | 연산자 | 결합 방향 | 
| 1 | ( ) [ ] -> . | ⇒ | 
| 2 | ! ~ ++ -- - + (cast) *(pointer) &(addr) sizeof | ⇐ | 
| 3 | * / % | ⇒ | 
| 4 | + - | ⇒ | 
| 5 | << >> | ⇒ | 
| 6 | < <= > >= | ⇒ | 
| 7 | == != | ⇒ | 
| 8 | & | ⇒ | 
| 9 | ^ | ⇒ | 
| 10 | | | ⇒ | 
| 11 | && | ⇒ | 
| 12 | || | ⇒ | 
| 13 | ?: | ⇐ | 
| 14 | = += -= *= /= %= ^= |= <<= >>= | ⇐ | 
| 15 | , | ⇒ | 
연산자 우선 순위와 결합 방향을 고려하여 프로그래밍하는 것은 프로그래머의 몫이며 프로그래밍은 가독성(간결성)과 효율(길이) 측면에서 고민하게 되는 경우가 자주 발생한다. 한 수식에 부득이하게 연산자를 여러 개를 써야 한다면 괄호 등을 적극 활용하여 우선 순위를 명확히 하는 것이 좋다.
3.12.2 연산자 결합 방향
한 수식에서 동일한 우선순위를 가진 연산자들이 연속적으로 나타나 있으면 연산자의 결합 방향을 고려하여야 한다. 대부분의 연산자들은 왼쪽에서 오른쪽으로 결합을 한다. 하지만 반대로 오른쪽에서 왼쪽으로 결합하는 연산자가 있다.
- 단항연산자, 형변환연산자, sizeof등은 오른쪽에서 왼쪽으로 결합한다. 
- 조건 연산자 (?) 는 오른쪽에서 왼쪽으로 결합한다. 
- 대입 연산자는 오른쪽에서 왼쪽으로 결합한다. 
[표 3.11.1] 연산자 결합 방향 예시
| 수식 | 결합 결과 | 
| a = x +y - z | a = (x + y) - z | 
| a = x * y / z | a = (x * y) / z | 
| a = x && y || z | a = (x && y) || z | 
| a = y+= z | a = (y+= z) | 
| a = *x++ | a = *(x++) | 
예를 들어서 sA=sY+=sZ 와 같은 표현식은 내부적으로 정해진 결합 순서에 의해서 오른쪽에서 왼쪽으로 결합하겠지만 프로그래머가 아예
| sA = (sY += sZ); | 
와 같이 괄호를 명시하든가 더 가독성을 높이려면
| sY += sZ;sA = sY; | 
와 같이 두 줄로 나누어 쓰는 것이 더 나아보일 수도 있다. 이는 전적으로 작성자의 성향에 달려있다고 할 수 있다.
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
| C++에서 함수의 기본값 인자 (default parameter) (0) | 2015.05.26 | 
|---|---|
| C++의 함수 중복(overloading) (0) | 2015.05.26 | 
| C/C++ 배열의 선언과 초기화 (part 2 / 2) (0) | 2015.05.26 | 
| C/C++ 배열의 선언과 초기화 (part 1 / 2) (0) | 2015.05.26 | 
| C/C++ 비트 마스킹의 정리와 응용 (4) | 2015.05.24 | 







 
 