2017-09-30 1 views
0

이것은 한 번만 제외하고는 잘 작동하는 것 같습니다. 나는 비트 연산자를 사용하여 C의 부호없는 int에서 비트를 분리하는 방법은 무엇입니까?

unsigned char c= 17512807u<<22>>22; 

내가이 359 또는 0,101,100,111 것으로 예상 숫자의 처음 10 개 비트를 얻으려고하지만 난이 일어나고있는 이유가 103 0001100111. 받고 있어요?

+0

부호없는 문자는 8 비트, 그래서는 0에서 255 당신이 서명 숯불에 맞지 않을 수 있습니다 원하는 359의 값 사이의 값을 포함 할 수 있습니다. – Jonesinator

+0

'0101100111'은 10 비트이다. 'unsigned char'는 8입니다 (아마도). –

+0

int가 컴퓨터에서 32 비트라고 가정 할 때, 이것은 상위 ("first") 10 비트가 아니라 하위 10 비트를 제공해야합니다. 결과는 'c'에 저장 될 때 8 비트로 잘립니다 (8 비트 문자로 가정). –

답변

1

결과는 8 비트 unsigned char 값으로 잘림 (c에 할당 할 때)으로 인해 정확합니다.

너비가 10 비트 인 값이 필요하면 uint16_t 또는 unsigned int과 같은 다른 데이터 유형을 사용해야합니다.

Reference to C++ integer datatypes

관련 문제