快速找到最接近的2次幂的指数的方法

2022-09-01 20:04:49

如果我有一个数字a,我想要b=2^x中的x值,其中b是比a大2的下一个幂。

如果你错过了这个标签,这是Java,a是一个int。我正在寻找最快的方法来做到这一点。到目前为止,我的解决方案是使用位微调来获得b,然后做(int)(log(b)/log(2)),但我觉得必须有一种更快的方法,不涉及除以两个浮点数。


答案 1

怎么样?这完全避免了浮点。如果您知道从不为 0,则可以省略第一部分。a == 0 ? 0 : 32 - Integer.numberOfLeadingZeros(a - 1)a


答案 2

如果有人正在寻找Andy提到的一些“有点扭曲”的代码,那可能看起来像这样:(如果人们有更好的方法,你应该分享!

    public static int nextPowerOf2(final int a)
    {
        int b = 1;
        while (b < a)
        {
            b = b << 1;
        }
        return b;
    }

推荐