我想写一个函数,返回最接近的下一个2的幂。例如,如果我的输入是789,那么输出应该是1024。有什么方法可以不使用任何循环而只使用一些按位运算符来实现这一点吗?
发布于 2009-01-21 17:35:47
next = pow(2, ceil(log(x)/log(2)));
它的工作原理是找到要用2乘以得到x的数字(取该数字的对数,然后除以所需基数的对数see wikipedia for more)。然后用ceil进行四舍五入,得到最接近的整数幂。
这是一个更通用的目的(即更慢!)方法比其他地方链接的逐位方法更好,但了解数学知识很好,是吧?
发布于 2012-09-20 12:46:23
我认为这也是可行的:
int power = 1;
while(power < x)
power*=2;
答案是power
。
发布于 2009-01-21 17:39:19
unsigned long upper_power_of_two(unsigned long v)
{
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
return v;
}
https://stackoverflow.com/questions/466204
复制相似问题