2016-08-16 3 views
0

내가 그랬어 내가 마인 크래프트 코드에서 발견 된 코드 샘플 설명하는 비트 단위와 비트 시프트 연산에 대한 몇 가지 연구 :비트 단위와 비트 시프트 연산

public static int extractDragMode(int eventButton) 
{ 
    return eventButton >> 2 & 3; 
} 

eventButton 항상 0 또는 2 인은하지 의지 Bitshift는 항상 왼쪽 부분을 0으로 만들고 0을 반환합니까?

+1

맞다면 예. 나도 그렇게 생각해. 항상 0, 1 또는 2로 평가되는 것이이 방법이 아니라는 것이 확실합니까? 결국 '& 3'이 주어지면 많은 의미가 있습니다. –

답변

0

을 : 전자 비트

그렇게 경우 eventButton는 같은 값을 유지 . 문제는 eventButton 자체가 흥미롭지 않다는 것입니다. eventButton 실제로 함께 여러 다른 값을 의심되는.

이것은 비트 마스킹이라고하는 기술입니다. 이벤트 버튼은 단일 정보에서 여러 정보를 포함합니다. 이 경우 드래그 모드 (메서드 이름 extractDragMode으로 판단)에 관심이 있습니다. 이것은 0, 1 또는 2가 될 드래그 모드입니다. 이것은 2 비트 만 필요하며이 두 비트는 int의 3 번째 및 4 번째 비트입니다. 두 비트를 오른쪽으로 이동하면 처음 두 위치로 이동시킵니다. 그런 다음 우리는 int에있는 다른 모든 비트를 0에서 3으로 만듭니다. 우리가 지금 남겨두고있는 것은 드래그 모드 비트의 값입니다.

+0

감사합니다! 정말 좋은 설명 – Xerus

2

eventButton는 동일한 0, 1, 2, 다음 예를 비트 연산이 항상 반환합니다 경우 0

이후 0, 1, 2는 모든 2 비트 숫자이다 비트 단위 이동하여 그들을 어떤 방향으로 2 비트는 항상 0이되기 위해가 발생합니다

00 >> 2 = 00 
01 >> 2 = 00 
10 >> 2 = 00 

0 & /*any number*/은 항상 기본적으로 당신이 eventButton 4 의 값을 분할하는 만 2 이하 Significativ를 받고 0

0

입니다 거의 확실하게 당신이 착각하고 eventbutton 다른 값을 많이 할하는 것이 가능 .. 그 결과는 제로가 될 수 0 개, 1 개 또는 2 개의