• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

conditional operator 우선순위 질문

23.03.19 16:36 작성 조회수 270

1

강의 마지막부분에서

int x = 5;

cout << (x % 2 == 0) ? "even" : "odd" << endl;

이 코드에서 가운데 출력부분에 전체 괄호를 감싸지 않으면 오류가 나는 이유를 생각해 보라고 해주셨는데 잘 모르겠어서 질문드립니다.

찾아보면 결합방향이 오른쪽에서 왼쪽이라고 되어있긴한데 오른쪽에서 왼쪽이라는게 저 위에 코드에서는 어떻게 적용이되는지가 이해가 잘 안되네요..

 

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

답변 1

답변을 작성해보세요.

3

Soobak님의 프로필

Soobak

2023.03.19

안녕하세요, 답변 도우미 Soobak 입니다. 😁

강의 3.1 연산자 우선순위와 결합 법칙 에서 학습하셨듯이, 연산자의 우선순위 때문입니다.
해당 강의의 4:48 부분에 나와 있는 연산자 우선순위 표를 참고하시면 더 도움이 되실 것 같습니다.

추가적으로 자세히 설명드려보면 다음과 같습니다. 😀

우선 오류가 나는 코드에 대해서 살펴보겠습니다.

int x = 5;
cout << (x % 2 == 0) ? "even" : "odd" << endl;

위 코드에서 스트림 출력을 할 때 이용하는 연산자 << 는 삼항 연산자보다 우선 순위가 높습니다.
따라서, 마치 (cout << (x % 2 ==0)) ? "even" : "odd" << endl" 처럼 괄호로 감싸져 있는 것 과 같고,
(cout << (x % 2 == 0)) 항목 자체가 삼항 연산자의 조건 식에 들어가게 되므로, 뒷 부분의 << endl 부분이 제대로 작동하지 않는 것입니다.

따라서,

int x = 0;
cout << ((x % 2 == 0) ? "even" : "odd") << endl

과 같이 괄호를 통해 << 연산자와 삼항 연산자 사이의 우선순위를 명확하게 해줌으로써 문제를 해결 할 수 있는 것입니다.