1

저는 Bitwise 연산의 개념에 익숙하지 않고 오늘날 몇 가지 예를 둘러보고있었습니다.순환 비트 연산 - as3

private function rotateLeft(value : uint, shift : int) : uint { 
     if ((shift &= 31) == 0) 
      return value; 
     return (value << shift) | (value >> (32 - shift)); 
    } 

어떤 아이디어 왜이 작동하지 않습니다 : 모든 분명까지 내가 uint가에 원형 bitshift을 수행하는 함수를 만들려고 지점까지 보였다? 이것은 단순 해 보이지만, 나는 명백한 것을 놓치고 있다고 생각합니다.

편집 :

내가 바보 0x0000FF 등의 라인을 따라 색상 값 (예를 들어 0xFF0000입니다) 및 예상 뭔가를 이동하려고했던 실제 사실 나는 때문에의 길이에, 올바른 진수 표기는 0xFF000000을 (점점 때 a uint) - 가장 중요한 바이트는 알파 값입니다.

+0

어떤 값으로 테스트하나요? –

답변

2

1 - 항상 범위에 변화를 유지 =>shift &= 31

2 -, 그렇지 않으면 당신은 당신의 번호로 전파됩니다 비트 기호를해야합니다, 부호없는 오른쪽 쉬프트 (>>>을) 따라서 예를 들어 (0x80000000 >> 16)이됩니다 사용 0xffff8000이고 0x00008000이 아님.

function rotateLeft(value : uint, shift : int) : uint { 
shift &= 31; 
return (value << shift) | (value >>> (32 - shift)); 
} 
+0

감사의 말을 듣고 내가 잘못 생각한 부분을 찾아 냈습니다. 내가 올바른 결과를 얻었음을 알았지 만, 내가 기대했던 것이 아니 었습니다! – soulBit