2011-12-26 108 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++;