5-4-나.결합 순서

결합 순서는 수식내에 같은 종류의 연산자가 있을 때 어떤 방향의 연산을 먼저 수행할 것인가를 지정한다. 연산 순위는 다른 종류의 연산자에 대한 실행 순서인 반면 결합 순서는 같은 연산자(또는 같은 순위내의 다른 연산자)의 실행 순서를 지정한다.

대부분의 이항 연산자들은 왼쪽 우선 순위를 가지기 때문에 수식에 등장하는 순서대로 실행된다. a=b+c+d; 연산문은 b와 c를 먼저 더하고 그 결과와 d를 다시 더하는데 덧셈은 교환 법칙이 성립하므로 사실 결합 순서가 큰 의미가 없다. 앞서 실습한 바 있는 다음 대입문을 보자.

 

a=b=c=3;

 

이 대입문은 a, b, c 모두 3을 대입하는데 대입 연산자는 오른쪽 우선이다. 즉 제일 오른쪽에 있는 c=3이 가장 먼저 실행되고 차례대로 b=c, a=b가 대입된다. 만약 대입 연산자가 왼쪽 우선 순위를 가지게 되면 a=b, b=c, c=3 순서대로 실행되어 a는 b의 쓰레기값을 가질 것이고 b는 c의 쓰레기값을 가지며 결국 3이 되는 것은 c밖에 없을 것이다.

대입 연산자가 오른쪽 우선의 결합 순서를 가지므로 복합 대입 연산자들도 모두 오른쪽 우선으로 되어 있다. 그외 단항 연산자들은 모두 오른쪽 우선 순위를 가진다. 다음 캐스트 연산문을 보자.

 

(double)(unsigned)i;

 

(unsigned)가 먼저 실행되어 i의 부호를 없앤 후 (double)이 실행되어 실수 타입으로 바꾼다.