例如,求出大于或等于12、13、15等数值的最小2的次幂:16;同理,大于等于5、6、7的最小次幂为8。
//v必须是一个32位整数
int roundup_power_of_2(unsigned int v)
{
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
return v;
}
更多位相关算法:
http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2