两个的最高幂但小于给定的 BigInteger

Highest power of two but smaller than given BigInteger

我需要找到两个的最大幂但小于给定的 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 限制的大数,所以我不能使用 & 运算符。 我正在使用 Java 7。 提前致谢。

使用 setBit 设置一位而不是清除很多位怎么样?

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