2011-03-01 74 views
1

的上級電力的AS3實現我一直在努力實施圍捕發電在AS3下面的鏈接概述2算法。兩種算法

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和其wonky uint實施的警告,但我似乎無法數字出來。我也嘗試使用>>>邏輯移位運算符得到相同的結果。

我的C是有點生疏,但我不知道如何做到這一點即使在返回C. 2誰能給我解釋一下怎麼回事錯在這裏?我認爲,如果1的輸入是它會在上面的鏈接被提及的一個特例。

+1

我看到這個功能好幾次。我根本不喜歡它。幾乎整個可存儲值的上半部分都會導致0.這是很多值的丟失......不幸的是,這只是沒有解決方案。這個功能確實像@TonyK指出的那樣起作用。 1不會返回2,因爲1位被inital'num - ; stomped給你0。'num | ='行然後不做任何事,然後'num ++'將你再次置於1 。 – 2014-07-10 23:22:06

回答

2

什麼問題? 1是2的冪:等於2^0。該算法按廣告方式工作。

+0

啊!你是對的。我真的需要睡一會兒! – mbaker3 2011-03-01 22:47:10