如果我有一个数字a,我希望x的值在b = 2 ^ x,其中b是2的下一个幂大于a.
如果您错过了标记,那么这是Java,而a是一个int.我正在寻找最快的方法来做到这一点.我的解决方案就是使用bit-twiddling来获取b,然后执行(int)(log(b)/ log(2)),但我觉得必须有一个更快的方法,不涉及划分两个浮动 -点数.
Jer*_*ock 36
怎么样a == 0 ? 0 : 32 - Integer.numberOfLeadingZeros(a - 1)?这完全避免了浮点数.如果你知道a从不0,你可以不用第一部分.
xba*_*esx 11
如果有人正在寻找Andy提到的一些"苦涩"的代码,那可能看起来像这样:(如果人们有更好的方法,你应该分享!)
public static int nextPowerOf2(final int a)
{
int b = 1;
while (b < a)
{
b = b << 1;
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
不一定更快,但一个班轮:
int nextPowerOf2(int num)
{
return num == 1 ? 1 : Integer.highestOneBit(num - 1) * 2;
}
Run Code Online (Sandbox Code Playgroud)