最高功率为2但小于给定的BigInteger

时间:2015-01-01 10:10:09

标签: java biginteger

我需要找到最高2的功率但比给定的BigInteger要小。我已经写了相同的以下方法并且它有效,只是想知道更好的解决方案甚至存在不同的解决方案吗?

 private static BigInteger getHighestPowerOf2(BigInteger bigInteger)
    {
    int bitLength = bigInteger.bitLength();
    for (int index = 0; index < (bitLength - 1); index++)
        bigInteger = bigInteger.clearBit(index);
    return bigInteger;
    }

因为我正在处理超过long和int的大数字所以我不能使用&amp;运营商。 我使用的是Java 7。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

如何使用setBit设置一位而不是清除大量位?

private static BigInteger getHighestPowerOf2(BigInteger bigInteger)
{
   int bitLength = bigInteger.bitLength();
   return BigInteger.ZERO.setBit(bitLength-1);
}

答案 1 :(得分:1)

您的方法会在每次调用BigInteger时创建一个新的clearBit,因此效率不高。