• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

마지막 퀴즈 질문 (0110 >> 2)

23.07.24 12:18 작성 조회수 289

1

cout << std::bitset<4>(0110 >> 2) << endl;으로 넣어 출력했더니

답이 0010으로 나옵니다 (10진수는 18로 출력됨)

답은 0110 >> 2 하면 0001이 되어 1아닌가요?

왜 0010(18)이 출력되는지 궁금하여 여쭤봅니다.

 

미리 답변 감사드립니다.

답변 1

답변을 작성해보세요.

4

Soobak님의 프로필

Soobak

2023.07.24

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

C++ 의 숫자 리터럴 표현 방식 때문입니다.
우선, 숫자 리터럴의 표현 방법에 대하여 설명드린 후, 질문하신 내용에 대해서 답변드리도록 하겠습니다.

  • 10진수 : 숫자 앞에 특별한 접두사가 없습니다.
    예를 들어, 10 은 '10진수 10' 입니다.

  • 8진수 : 숫자 앞에 0 이 오는 숫자를 8진수로 간주합니다.
    예를 들어, 011 은 '8진수 11' , 10진수로는 9 가 됩니다.

  • 16진수 : 숫자 앞에 0x 또는 0X 가 오는 숫자를 16진수로 간주합니다.
    예를 들어, 0x10 은 '16진수 10', 10진수로는 16 이 됩니다.

  • 2진수 : 숫자 앞에 0b 또는 0B 가 오는 숫자를 2진수로 간주합니다.
    예를 들어 0b10 은 '2진수 10', 10진수로 2 가 됩니다.

따라서, 질문하신 cout << std::bitset<4>(0110 >> 2) << endl; 에서,
0110 은 8진수 110 으로, 10진수로는 72 가 됩니다.
컴파일러를 통해서도 해당 숫자의 실제값은 72 임을 확인하실 수 있습니다.
image

즉, 실제로 코드가 수행하는 연산은 72 >> 2 이며, 이를 계산하면 10진수로 18 이 됩니다.
이 때, bitset<4> 를 사용하셨으므로, '10진수 18' 을 '2진수로 표현한 10010' 에서
비트의 일부가 잘려 0010 만 출력되는 것입니다.

원하시는 의도처럼 '2진수 0110' 을 연산하시려면, 강의에서의 코드처럼 0b0110 으로 올바른 접두사를 붙여 작성하셔야 합니다.

이이님의 프로필

이이

질문자

2023.07.24

친절한 답변 감사합니다. 이해 완료하였습니다!