inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

7.7 논리 연산자 Logical operators

강의 내용 중 연산자의 우선순위

463

CJS

작성한 질문수 22

1

강의 17:00부분을 보면 어떠한 expression이 있을 때 괄호의 경우 어느것 먼저 계산될지는 c언어 표준에 정해져있지않으므로 컴파일에 따라 결정된다고 설명해주셨습니다.

그런데 구글에 c언어 연산자 우선순위를 검색하면 associativity라고 있는데 연산자 우선순위가 같은 경우 이 방향에 따라서 결정되는거 아닌가요?

괄호 같은 경우 연산자 우선순위가 1순위지만 associativity가 왼쪽에서 오른쪽이므로 여러개 있을경우 왼쪽부터 계산되는거 아닌가요?

제가 잘못이해한걸까요?

감사합니다.

c

답변 1

1

Soobak

안녕하세요, 답변 도우미 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++;

 

1

CJS

감사합니다.

근데 연산자 우선순위를 검색하면 x++가 1순위고 결합법칙이 오른쪽이라고 하는데 이건 뭘까요...?ㅠㅠ

0

Soobak

안녕하세요, 답변 도우미 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