강의 내용 중 연산자의 우선순위
463
작성한 질문수 22
강의 17:00부분을 보면 어떠한 expression이 있을 때 괄호의 경우 어느것 먼저 계산될지는 c언어 표준에 정해져있지않으므로 컴파일에 따라 결정된다고 설명해주셨습니다.
그런데 구글에 c언어 연산자 우선순위를 검색하면 associativity라고 있는데 연산자 우선순위가 같은 경우 이 방향에 따라서 결정되는거 아닌가요?
괄호 같은 경우 연산자 우선순위가 1순위지만 associativity가 왼쪽에서 오른쪽이므로 여러개 있을경우 왼쪽부터 계산되는거 아닌가요?
제가 잘못이해한걸까요?
감사합니다.
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
우선, 수식을 감싸는 괄호 () 는 연산자가 아니라, primary expression 으로 표현식의 계산 순서를 바꿀 수 있는 도구로 사용됩니다.
(강의 5.6 연산자 우선순위와 표현식 트리 에서 설명해주시는 내용이니, 참고해보시면 도움이 되실 것 같습니다.)
따라서, 결합법칙(associativity) 중 왼쪽에서 오른쪽으로의 결합법칙(left-to-right associativity)은 괄호에 대해서는 적용이 되지 않습니다.
예를 들어서, 3 - 2 - 1 에서 - 은 연산자이며, 왼쪽에서 오른쪽으로 결합법칙이 적용되므로, 3 - 2 가 먼저 계산되고, 그 후 1 - 1 이 계산됩니다.
즉, (3 - 2) - 1 과 같이 계산됩니다
하지만, 괄호는 언제나 가장 높은 우선순위를 가지므로, 괄호 내의 모든 식은 다른 모든 연산보다 먼저 적용됩니다.
이 맥락에서, 여러 개의 괄호가 있는 경우, 왼쪽에서 오른쪽으로 계산되는 것이 아니라, 각각의 괄호 내부가 독립적으로 계산되며, 이 계산 순서는 C언어 표준에 정의되어있지 않으므로, 컴파일러에 따라 다르게 적용되는 것으로 이해하시는 것이 적절할 것 같습니다.
다만, ((2 * 3) + 1) 과 같이 괄호가 중첩되어 있는 경우, 가장 안쪽의 괄호부터 먼저 계산됩니다.
또한, 교수님께서 강의에서 설명해주신 증감 연산자의 경우에도 마찬가지 입니다.
다음의 예시 코드에 대해서 x++ 의 계산 순서 자체는 C언어 표준에 정의되어 있지 않습니다.
따라서, 컴파일러에 따라 첫 번째 x++ 가 먼저 계산될 수도 있고, 두 번째 x++ 가 먼저 계산될 수도 있습니다.
int x = 5;
int y = x++ + x++;
0
안녕하세요, 답변 도우미 Soobak 입니다.
증감 연산자와 다른 연산자들 사이에서 증감 연산자 자체의 우선순위는 1순위가 맞습니다. 검색으로 찾으신 내용은 이 부분에 대한 내용인 것 같습니다.
하지만, 증감 연산자와 다른 증감 연산자,
즉, int y = x++ + x++ 와 같은 경우에 대해서는 우선 순위가 C언어 표준에 정의되어 있지 않습니다.
Export template 안됨
1
30
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
57
3
main 함수에서 왜 int만 선언이 되는걸까요
1
57
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
55
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
138
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
94
3
강의자리ㅛ
1
80
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
114
2
소스파일안에 여러 파일
1
76
2
F5와 F7의 차이
1
79
2
c = TWO * (a+b); 에서 a와 b는?
1
60
2
; 세미콜론을 붙이는 기준에 문의
1
70
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
76
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
61
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
54
2





