四舍五入到2的下一个幂

我想编写一个函数,该函数返回2的最接近的下一个幂。例如,如果我的输入为789,则输出应为1024。是否有任何方法可以在不使用任何循环而仅使用一些按位运算符的情况下实现这一目标?



jeck猫
浏览 377回答 3
3回答

Qyouu

检查位扭曲黑客。您需要获取以2为底的对数,然后将其加1。32位值的示例:向上舍入到2的下一个最高幂unsigned int v; // compute the next highest power of 2 of 32-bit vv--;v |= v >> 1;v |= v >> 2;v |= v >> 4;v |= v >> 8;v |= v >> 16;v++;对其他宽度的扩展应该是显而易见的。

慕尼黑8549860

next = pow(2, ceil(log(x)/log(2)));这可以通过找到将x加2的数字来获得(获得数字的对数(取数字的对数,然后除以所需底数的对数,有关更多信息,请参阅Wikipedia)。然后将其与ceil取整以获得最接近的整数幂。这是比其他地方链接的按位方法更通用的方法(即,速度更慢!),但是很了解数学,对吗?

收到一只叮咚

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;}
打开App,查看更多内容
随时随地看视频慕课网APP