2012-06-18 4 views
0

"i"에서 "face"를 어떻게 검색합니까?비트 시프트에서 요소 가져 오기

int i = (id | (face << 16) | (type << 18)) 

감사합니다!

+0

난 정말 당신의 질문을 이해하지 않습니다. 당신은 이미 얼굴에 대한 참조를 가지고 있습니다, 당신은 언제나 그것을 i에서 추출 할 필요가없는 새로운 값을 할당 할 수 있습니다. – purtip31

+0

'id','face' 및'type'의 값 범위를 알고 있습니까? –

+0

i에 대한 참조는 나중에 많은 양의 데이터를 압축하는 방법이므로 손실됩니다. – Colby

답변

1

그래서, ID가 16 비트 폭이라는 ​​제한을 주어 그 얼굴은, 폭 넓은 용도로만 2 비트 :

face = (i >> 16) & 3 
+0

감사! 3으로 가면 어떻게 알았지? (나는이 물건을 배우려고 노력하고있다.) – Colby

+0

3은 (바이너리로) 00000011이므로 X와 함께 anding X는 X의 마지막 2 비트만을 제공 할 수있다. – billjamesdev

1

너비가 2 비트 뿐이고, id이 16 비트 너비라는 것을 보장 할 수 없다면, 그렇지 않으면 오른쪽 시프트와 마스크 만 있으면됩니다. 이게 속임수입니까?

+0

실제로는 2 비트 폭이며 id는 16 비트 폭입니다. 이것은 내가 원래 생각해 내었던 것입니다 : (i >> 16) & 16 그러나 그것은 작동하지 않았습니다! – Colby

+0

@Colby 그럼 * correct * shift와 mask를 사용해야 할 것입니다. 너비가 2 비트라면'& 3'이 필요합니다. – EJP