如果我有一个数字a,我想要x在b=2^x中的值,其中b是2的下一个大于a的幂。
如果您错过了标记,这是Java,而a是一个int。我正在寻找最快的方法来做这件事。到目前为止,我的解决方案是使用位旋转来获得b,然后是do (int)(log(b)/log(2)),但我觉得必须有一种更快的方法,不需要将两个浮点数相除。
发布于 2011-03-09 15:25:14
那a == 0 ? 0 : 32 - Integer.numberOfLeadingZeros(a - 1)呢?这完全避免了浮点。如果您知道a从不为0,则可以省略第一部分。
发布于 2012-08-02 05:22:09
如果有人正在寻找Andy提到的一些“微不足道”的代码,它可能是这样的:(如果人们有更好的方法,你应该分享!)
public static int nextPowerOf2(final int a)
{
int b = 1;
while (b < a)
{
b = b << 1;
}
return b;
}发布于 2017-10-10 18:24:24
不一定更快,但只有一行代码:
int nextPowerOf2(int num)
{
return num == 1 ? 1 : Integer.highestOneBit(num - 1) * 2;
}https://stackoverflow.com/questions/5242533
复制相似问题