• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

3.8 비트단위 연산자

23.10.28 21:42 작성 조회수 166

1

안녕하세요. 비트단위 연산자를 공부하던 중 궁금한 점이 생겼습니다.

왜 컴파일 했을 시, bitset<4>(0110 >> 2)가 0001이 아닌 0010이 나오는지 모르겠습니다.

알려주시면 정말 감사하겠습니다.

#include <iostream>
#include <bitset>
using namespace std;

int main()
{
	cout << bitset<4>(0110 >> 2) << endl;
}

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.10.28

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

 

C++ 에서는 숫자 앞에 0 이 오는 숫자를 8진수로 간주합니다.
따라서, 코드에서 0110 은 8진수 110 으로, 10진수 72 입니다.

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

 

'2진수 0110' 을 연산하시려면, 강의에서의 코드처럼 0b0110 으로 2진수를 표현하기 위한 접두사 0b 를 붙여 작성하셔야 합니다.

 

C++ 의 숫자 리터럴 표현 방식, 그리고 유사한 내용에 대한 질문 답변 링크를 첨부드립니다.

질문/답변 - 마지막 퀴즈 질문 (0110 >> 2) (링크)