2017-12-01 4 views
-1

원본 파일에서 int로 렌더링 된 32 비트 숫자가 제공됩니다. 하나의 값에서 가장 오른쪽의 8 비트 (0-7)가 필요하고 다른 하나의 바로 다음 8 비트 (8-15)가 필요합니다. 비트 마스킹과 비트 시프트를 사용하여 모든 것을 정렬하도록 지시 받았지만 정수로 어떻게 작동하는지 모르겠습니다. 그들은으로 바닥 (8)는 그 값을 유지합니다 동안C++ - 비트 마스크를 사용하여 int에서 값 얻기

답변

1

만 8 개 오른쪽 비트를 얻으려면, 당신은 0 상위 24 비트 AND 연산 때문에

int right8 = mynum & 0xFF; 

을 수행 할 수 있습니다, 이러한는 0으로 설정됩니다 사람과 함께 할 것입니다.

다음 8 개의 오른쪽 끝을 얻으려면 비트 마스크에서 비트 8-15를 1로 설정하고 다른 모든 비트를 0으로 설정해야합니다. 8-15 위치에 동일한 비트가 유지되지만 하단 8 비트에 있어야하기 때문에 비트를 오른쪽으로 8 비트 이동하면됩니다. 당신은 다음과 같이 할 수 있습니다.

int next8 = myNum & 0xFF00; 
int next8 = next8 >> 8; 
+0

감사합니다. 지금 바로 시도해 보겠습니다. – Sig

+0

편차가 무엇이고 마스크가 무엇인지 정확하게 집에서 편집 할 것을 권장합니다. 비슷하지만 정확하지는 않은 문제를 가진 미래의 질문자에게 좀 더 다재다능한 답을 줄 것입니다. – user4581301

+0

또는, 오른쪽으로 먼저 이동 한 다음 결과를 0xFF로 마스크 할 수 있습니다.'int next8 = (myNum >> 8) & 0xFF;' –

관련 문제