如何计算出大于某个值的最小2的次幂

例如,求出大于或等于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

猜你喜欢

转载自aigo.iteye.com/blog/2292394