AS3에서 다음 링크에 설명 된 Round Up Power of 2 알고리즘을 구현하려고했습니다. AS3의 두 알고리즘의 위력 구현
http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
public static function upperPowerOfTwo(num:uint):uint
{
// if(num == 1) return 2;
num--;
num |= num >> 1;
num |= num >> 2;
num |= num >> 4;
num |= num >> 8;
num |= num >> 16;
num++;
return num;
}
알고리즘은 내가 테스트 한 값의 가장 위대한 작품. 기술적으로 부정확 한 0의 입력 값이 주어지면 0을 반환하지만 그 출력은 정상입니다. 내가 싫어하는 부분은 1의 입력을 받아서 1을 출력 할 때이다.
나는 이것이 AS3의 경고문이고 그 위키의 구현체가되어야한다고 생각한다. 그것. 나는 또한 >>> 논리 시프트 연산자를 사용하여 같은 결과를 얻으려고 시도했다.
내 C는 약간 녹슬었지만 C로 2를 반환하는 방법을 모르겠다. 누군가 나에게 설명 할 수있는 부분이 잘못 되었습니까? 1의 입력이 위의 링크에서 언급되었을 특별한 경우라고 가정합니다.
이 기능을 여러 번 보았습니다. 나는 그것을 전혀 좋아하지 않는다. 저장 가능한 값의 거의 절반 전체가 0이됩니다. 손실 된 값이 많습니다. 불행히도 그 해결책은 없습니다. 이 기능은 실제로 지적 된대로 @ TonyK가 지적한대로 작동합니다. 1은 2를 반환하지 않습니다. 왜냐하면 1 비트가 inital'num -;에 의해 stomp되어 0을 갖기 때문입니다.'num | ='줄은 아무 것도하지 않고'num ++'는 다시 최대 1을 넣습니다 . –