2011-12-21 2 views
1

게임 논리를 해결하려고합니다 (플래시).번호 위치에 대한 비트 마스크를 찾습니다.

_ _ * _ _ __ *

나는 * 년대 사이의 모든 공간이 비어 (* 행에서 발생할 수있는 이외의 비 빈 값)하면 찾을 필요가 : 한 부분에서 다음 행을 부여. 이 작업은 꽤 자주 수행됩니다.
루프를 반복하고 중간 위치를 확인하는 대신 행의 비트 표현을 사용할 수 있는지 궁금합니다. xx1xxx1로 표현 행 _ _ * _ _ _ * 들어

(x = 1 또는 0), I는 응답이 0000000 경우 0001110 그래서, 상기 중간 위치가 비어 있는지에이를 수 있고.

여기서 질문은 (Flash AS2에서) 비트 연산을 사용하여 두 번째 맵 (0001110)을 찾는 방법입니다. (지도 (1,4) -> 0110, (1,3) -> 0100 등)
또는 중간 위치를 반복하는 것이 더 나은 선택일까요?

+0

잘 모르겠지만 관심있는 비트 주위의 비트 위치를 알고 계십니까? 또는 '001xxx1'처럼 맨 왼쪽과 오른쪽에 1입니까? – Kapep

+0

예, 위치를 알고 있습니다. 그것이 Map (1,4), Map (1,3) 등의 의미였습니다. – eternalthinker

답변

2

일부 비트를 이동하면이 작업을 수행 할 수 있습니다. 나는 제로부터 시작하여 오른쪽에서 계산하는거야 -

var bits:int = 0x7F; // 7 bits 
var mask:int = ((bits >> (bits - end)) << start) & bits; 

나는 당신이 일을 시작으로 왼쪽에서 그것을처럼 예에서 보인다, 위치를 계산하는 방법을 잘 모르겠어요 , 나는 더 많이 추측한다. 따라서 start의 값은 첫 번째 1 (오른쪽부터 0부터 계산)의 위치이고 end은 가장 왼쪽의 1의 위치입니다.

그 상세 동작 방법의 예 :

이를 설명하는 또 다른 방법

// row:   xx1xxx1 
// desired mask: 0001110 
//    the sequence of ones in the mask starts at 1, ends at 3 

bits = 0x7F;  // 1111111 
mask = bits >> 4; // 0000111 
mask = mask << 1; // 0001110 
: bits-(end+1) 왼쪽 및 start에 제로의 양이 사람의 서열의 오른쪽에 제로의 양이고 .

관련 문제