我需要找到最高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。 提前谢谢。
答案 0 :(得分:3)
如何使用setBit设置一位而不是清除大量位?
private static BigInteger getHighestPowerOf2(BigInteger bigInteger)
{
int bitLength = bigInteger.bitLength();
return BigInteger.ZERO.setBit(bitLength-1);
}
答案 1 :(得分:1)
您的方法会在每次调用BigInteger
时创建一个新的clearBit
,因此效率不高。