리메이크 중/C,C++ 이론 중심

C(&C++) 이론 11. 연산자 우선순위 및 결합 방향 표

라이피 (Lypi) 2023. 1. 4. 17:58
반응형

목록용 썸네일 이미지


내용 참고

C++ 기초 플러스 4판 (Stephen Prata저, 윤성일역 / 성안당)

Microsoft docs (구MSDN)


C언어 이론 5 / 연산자 우선순위 표

  연산자 우선순위와 결합 방향에 관한 표는 대부분의 C++ 교재에서 제공된다. 이를 외우고 있으면 유리하겠지만 굳이 C 및 C++을 공부할 때 처음부터 연산자 우선순위를 외우려고 할 필요는 없다. 왜냐하면 연산자 우선순위라는 것은 쓰다보면 결국 익숙해지고 외워지는 내용이기 때문이다. 

  본 포스트에서는 연산자의 형식과 우선순위, 결합 방향, 오버로딩 가능 여부를 중심으로 표시하는데 중심을 두었다. 각 연산자에 대한 자세한 설명은 이후에 관련 주제와 함께 설명할 예정이다.


Ⅰ. 연산자 우선순위와 결합 방향의 의미

ⅰ. 연산자 우선순위

■ 문장 안에 여러개의 연산자가 존재할 경우 우선 순위가 높은 연산부터 실행된다.

			int a=0, b=3, c=5;
			a = b++ + ++c;

■ 예를 들어 위와 같은 수식이 있다고 하면 아래와 같이 연산 순서가 설정된다.

■ 그 결과 아래와 같은 순서로 연산이 수행된다.

		a = 3 + ++c;	 // 현재 a는 0, b는 4, c는 5;
		a = 3 + 6;	 // 현재 a는 0, b는 4, c는 6;
		a = 9; 		 // 현재 a는 0, b는 4, c는 6;
		;		 // 현재 a는 9, b는 4, c는 6;

ⅱ. 연산자 결합 방향

■ 만약 연산 순위가 같은 연산자끼리 붙어있다면 연산자 결합 방향에 따라서 순서가 결정된다.

■ 아래의 두개의 수식 중 '식2'는 우선순위가 모두 같기 때문에 결합 순서에 따라서 연산이 실행된다.

■ 식2에 사용된 대입연산자들은 연산순위 15위이고 오른쪽에서 왼쪽으로 결합된다.

		int a = 2, b = 2, c = 2, d = 2, e = 2, f = 2; 	
		a = a + b * c / d - e + f;  // 식1 a의 값은 4
        
		int a = 2, b = 2, c = 2, d = 2, e = 2, f = 2; 
		a += b *= c /= d -= e += f; // 식2 a의 값은 0

■ 즉, 식2는 오른쪽부터 순서대로 실행되어 a의 값이 식1과는 달라지게 된다.


ⅲ. 소괄호

■ 소괄호는 C언어 내에서 기능이 많지만 괄호로 묶은 수식의 우선순위를 최우선으로 올려주는 역할이 있다.

■ 실제 코드에서는 연산자를 중복시키는 경우가 많지 않으며 결합시켜야 하는 경우 가독성을 위해서 괄호를 쓰는 경우가 많다.

■ 특히 매크로 함수를 쓸 경우 의도하지 않은 결과가 나오는 것을 막으려면 괄호를 잘 써야한다.


Ⅱ. 우선순위 표

ⅰ. 배경색 설명

■ 진한 분홍색으로 표시된 연산자는 특수한 역할을 하는 연산자들이다.

■ 연보라색으로 표시된 연산자들은 산술 연산자들이다.

■ 연한 주황색으로 표시된 연산자들은 논리 연산과 관련된 연산자들이다.

■ 비취색으로 표시된 연산자들은 비트 연산과 관련된 연산자들이다.

■ 하늘색으로 표시된 연산자는 증감 연산자들이다.

■ 연노랑색으로 표시된 연산자들은 사용자 정의 타입과 포인터에 관련된 연산자들이다.

■ 연한 분홍색으로 표시된 연산자는 형변환 연산자들이다.

■ 연두색으로 표시된 연산자는 동적 할당과 해제와 관련된 연산자들이다.

ⅱ. 1순위

■ 괄호로 묶기는 실제 연산자는 아니지만 연산자 우선순위를 1순위로 올려주는 역할을 하므로 표에 추가했다.

ⅲ. 2순위

■ 후위 증감 연산자는 우선순위는 높지만 저장된 값을 먼저 반환한 뒤 값을 증감시킨다.

■ C++에서 추가된 명시적 형변환 연산자 4가지는 재정의가 불가능하다.

ⅳ. 3순위

■ 전위 증감 연산자는 저장된 값을 증감시킨 뒤에 값을 반환한다.

■ C++에서 추가된 명시적 형변환 연산자들과 달리 C언어부터 존재한 형변환 연산자는 재정의가 가능하다.

ⅴ. 4순위

ⅵ. 5, 6 순위

■ 곱하기와 나누기가 더하기,빼기보다 연산순위가 높기 때문에 일반적인 수학 연산과 같은 결과가 나온다.

ⅶ. 7순위

ⅷ. 8, 9순위

■ 반환값이 bool형인 관계 연산자들은 논리 연산자로 분류했다.

 

반응형

ⅸ. 10, 11, 12순위

ⅹ. 13, 14순위

■ and연산은 곱하기와 동치이고 or연산은 더하기와 동치이므로 연산 순위가 나누어져 있다.

ⅹⅰ. 15, 16순위

 

■ '*='와 같은 연산자들을 복합 대입 연산자라고 부른다

■ 복합 대입 연산자들은 우선순위가 모두 15위로 같기 때문에 남용해서는 안된다.


반응형