2017-10-13 7 views
5

저는 부드러운 질감을 만들기 위해 주위를 감싸는 C#의 다이아몬드 사각 알고리즘 implementation에 대해 읽었습니다. 다음 점을 계산하기 위해 사각형 또는 다이아몬드에 정렬 된 4 개의 샘플 점의 평균을 취합니다. 샘플 포인트가 텍스처의 가장자리에 있으면, 다른 포인트로 랩핑됩니다. 이 랩핑은 다음 메소드를 사용하여 수행되는 것으로 보입니다.이 문장에서 bitwise 함수는 무엇입니까?

public double sample(int x, int y) 
{ 
    return values[(x & (width - 1)) + (y & (height - 1)) * width]; 
} 

약간의 조사 결과 비트 연산자라고 알려줍니다. 나는 전에 그들을 사용하지 않았으며, wikipedia article은 깨닫지 못했습니다. 누군가가 & 연산자가이 방법에서 무엇을하는지 설명 할 수 있습니까?

편집 : 텍스처 크기는 그것은 "포장"을 위해입니다 항상 두 개의

답변

8

의 힘이다.는 음수가 x 인 경우를 제외하고는 과 거의 동일하지만 (부정확 한 경우 일 때 x은 음수가됩니다.) 결과) 거의 확실하게 빠릅니다.

또는 예를 시각적으로 말하면, 당신 w-1 형태에서 볼 수 있듯이 다음

x  = 00000000 00000000 00000000 01001100 
w  = 00000000 00000000 00000000 01000000 
w-1  = 00000000 00000000 00000000 00111111 
x & w-1 = 00000000 00000000 00000000 00001100 = 12 

, width = 64x = 64+12 = 76 말하는 동작 x & w-1는 가정 x의 하단 비트를 복용 같다 물론 w은 여전히 ​​2의 힘입니다. 따라서 가중치가 64이고 배수가 64 인 비트는 실제 "모듈로 64"연산과 마찬가지로 제거됩니다 (부호있는 정수로 작업하는 경우 C#에서는 %이 아니며 나머지는 나머지).