• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

3.6 논리연산자 따라해보기

22.11.22 18:08 작성 조회수 167

1

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

 



안녕하세요 따배씨 강의중에 따라해보기 하는 중인데 예상과 다르게 나와서 질문드려요

3.6강의 logical operator (논리 연산자 강의) 28:13 부분인데요

std::cout << std::boolalpha;

1.std::cout << false || true;

2.std::cout << false && true;

3.std::cout << (true && true) || true;

4.std::cout << (false && true) || true;

5.std::cout << (false && true) || false || true;

이렇게 치면 1번이나 3번 4번에서는 true가 나올 것 같은데 false로 나오더라고요 반대로 true || false로 두면 true로 나옵니다

bool b1 = false || true;

bool b2 = (false && true) or true;

std::cout << b1 << std::endl;

std::cout << b2 << std::endl;

근데 이렇게 변수로 출력하면 예상했던 것처럼 true로 나오고요

왜 이런 차이가 생기는 건가요?? 연산자 우선순위?? 아니면 cout에서는 or뒤는 안보는 건가요???

디버그 모드로 돌려도 잘 모르겠어서 질문드려요

cout << ((false && true) or true); 이렇게 괄호를 치면 true 나오네요 우선순위 문제인가 보군요..

cout<<false || 까지만 되고 뒤에 true부분은 그냥 없는걸로 처리되는건가요??

답변 1

답변을 작성해보세요.

0

Ambition님의 프로필

Ambition

2022.11.23

https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B에서 우선순위 보시면 도움이 될 듯 합니다. 제 생각에는 << operator는 ostream 클래스의 한 객체인데, 정의부분을 보시면 인자 하나만 받을 수 있는데 괄호로 묶지 않으면 인자가 여러 개라서 컴파일러가 어느 것을 인스턴스로 봐야하는지 몰라서 에러가 뜨는 것 같습니다.