2011-12-26 88 views
1
unsigned long ccNextPOT(unsigned long x){ 

    x = x - 1; 
    x = x | (x >> 1); 
    x = x | (x >> 2); 
    x = x | (x >> 4); 
    x = x | (x >> 8); 
    x = x | (x >>16); 
    return x + 1; 
} 
+3

它的工作原理相當快。 – 2011-12-26 15:46:23

+0

我知道它運作良好,但我想知道它使用哪種算法。 – guoxx 2011-12-26 15:51:16

+3

看看[這裏](http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2)。 – Howard 2011-12-26 15:51:39

回答

2

OR和SHIFT語句在最高有效位(最多32位)的右側填充了x的所有位。連同前遞減和遞增後的語句,這個函數計算(作爲函數名稱suggets)下一個冪次數,等於或大於給定數字(如果x大於0且小於2^32 )

+0

預遞減確保兩個零的輸入和兩個冪的映射到它們自己。 – njuffa 2011-12-26 17:41:20

0

此功能x舍高達2下一個最高權力這正是代碼中here

unsigned int v; // compute the next highest power of 2 of 32-bit v 

v--; 
v |= v >> 1; 
v |= v >> 2; 
v |= v >> 4; 
v |= v >> 8; 
v |= v >> 16; 
v++;