首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向上舍入到2的下一个幂

向上舍入到2的下一个幂
EN

Stack Overflow用户
提问于 2009-01-22 01:26:18
回答 26查看 225.7K关注 0票数 232

我想写一个函数,返回最接近的下一个2的幂。例如,如果我的输入是789,那么输出应该是1024。有什么方法可以不使用任何循环而只使用一些按位运算符来实现这一点吗?

EN

回答 26

Stack Overflow用户

发布于 2009-01-21 17:35:47

代码语言:javascript
复制
next = pow(2, ceil(log(x)/log(2)));

它的工作原理是找到要用2乘以得到x的数字(取该数字的对数,然后除以所需基数的对数see wikipedia for more)。然后用ceil进行四舍五入,得到最接近的整数幂。

这是一个更通用的目的(即更慢!)方法比其他地方链接的逐位方法更好,但了解数学知识很好,是吧?

票数 85
EN

Stack Overflow用户

发布于 2012-09-20 12:46:23

我认为这也是可行的:

代码语言:javascript
复制
int power = 1;
while(power < x)
    power*=2;

答案是power

票数 66
EN

Stack Overflow用户

发布于 2009-01-21 17:39:19

代码语言:javascript
复制
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;

}
票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/466204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档