java - 如何找到小于给定数的2的最大次方

标签 java algorithm

我需要找到小于给定数字的 2 的最大幂。
我卡住了,找不到任何解决方案。

代码:

public class MathPow {
   public int largestPowerOf2 (int n) {
        int res = 2;        
        while (res < n) {
            res =(int) Math.pow(res, 2);
        }
        return res;
   }
}

这不能正常工作。

测试输出:

Arguments Actual Expected
-------------------------
9         16     8       
100       256    64      
1000      65536  512     
64        256    32      

如何解决这个问题?

最佳答案

Integer.highestOneBit(n-1);

对于 n <= 1这个问题真的没有意义。在该范围内做什么留给感兴趣的读者。

Hacker's Delight 中有一个很好的位旋转算法集合.

关于java - 如何找到小于给定数的2的最大次方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379020/

相关文章:

java - SwingWorker 没有按预期工作

java - 如何使用亚马逊资源名称 (ARN) 作为标识符来查找亚马逊资源?

java - 安全发布数组元素

algorithm - 我应该使用广度优先还是深度优先来搜索文件系统以查找预定数量的错误?

algorithm - 检测重叠周期(或时间范围)的最快方法

具有验证的唯一 CD-KEY 生成算法

java - J2ME 中的 LWUIT : setting the style of a list cell when pressed

c++ - C++ 链表中的虚拟节点

使用高斯算法的 2016 年 Java 复活节计算器

java - selectedItem PropertyChanged 取消事件