C 연산자 우선순위와 결합 규칙 완벽 이해하기
연산자 우선순위
연산자 우선순위는 표현식에 둘 이상의 연산자가 있을 때 어떤 연산자가 먼저 실행되는지 결정합니다.
예시를 들어보겠습니다:
int x = 5 - 17 * 6;
C에서 *의 우선순위는 -와 =보다 높습니다. 따라서 17 * 6이 먼저 평가됩니다. 그런 다음 - 연산이 평가되는데, -의 우선순위가 =보다 높기 때문입니다.
높은 우선순위에서 낮은 우선순위로 연산자 우선순위와 결합 규칙 표입니다. 결합 규칙(associativity) 속성은 잠시 후 논의하겠습니다.
연산자 우선순위 및 결합 규칙 표
| 연산자 | 의미 | 결합 규칙 |
| () [] -> . | 함수 호출 배열 요소 참조 간접 멤버 선택 직접 멤버 선택 | 왼쪽에서 오른쪽 |
| ! ~ + - ++ -- & * sizeof (type) | 논리 부정 비트(1의 보수) 보수 단항 플러스 단항 마이너스 증가 감소 역참조(주소) 포인터 참조 객체 크기 반환 타입 캐스트(변환) | 오른쪽에서 왼쪽 |
| * / % | 곱셈 나눗셈 나머지 | 왼쪽에서 오른쪽 |
| + - | 이항 플러스(덧셈) 이항 마이너스(뺄셈) | 왼쪽에서 오른쪽 |
| << >> | 왼쪽 시프트 오른쪽 시프트 | 왼쪽에서 오른쪽 |
| < <= > >= | 보다 작음 작거나 같음 보다 큼 크거나 같음 | 왼쪽에서 오른쪽 |
| == != | 같음 다름 | 왼쪽에서 오른쪽 |
| & | 비트 AND | 왼쪽에서 오른쪽 |
| ^ | 비트 배타적 OR | 왼쪽에서 오른쪽 |
| | | 비트 OR | 왼쪽에서 오른쪽 |
| && | 논리 AND | 왼쪽에서 오른쪽 |
| || | 논리 OR | 왼쪽에서 오른쪽 |
| ?: | 조건 연산자 | 오른쪽에서 왼쪽 |
| = *= /= %= += -= &= ^= |= <<= >>= | 단순 대입 곱셈 대입 나눗셈 대입 나머지 대입 합 대입 차 대입 비트 AND 대입 비트 XOR 대입 비트 OR 대입 왼쪽 시프트 대입 오른쪽 시프트 대입 | 오른쪽에서 왼쪽 |
| , | 표현식 구분자 | 왼쪽에서 오른쪽 |
연산자 결합 규칙
연산자 결합 규칙은 표현식이 평가되는 방향을 결정합니다. 예를 들어,
b = a;
여기서 a의 값이 b에 할당되고, 그 반대는 아닙니다. = 연산자의 결합 규칙이 오른쪽에서 왼쪽이기 때문입니다.
또한 동일한 우선순위(우선순위)를 가진 두 연산자가 있는 경우 결합 규칙이 실행 방향을 결정합니다.
예시를 들어보겠습니다:
1 == 2 != 3
여기서 연산자 ==와 !=는 동일한 우선순위를 가집니다. 그리고 이들의 결합 규칙은 왼쪽에서 오른쪽입니다. 따라서 1 == 2가 먼저 실행됩니다.
위의 표현식은 다음과 동일합니다:
(1 == 2) != 3
참고: 문장에 여러 연산자가 있는 경우 괄호 ()를 사용하여 코드를 더 읽기 쉽게 만들 수 있습니다.
목차