Java 中 BigInteger 的 log2

Lin*_* Ma 1 java

想知道有没有log_2直接计算的API ?这是我当前的代码,我将其转换log_2(N)log_e(N)/log_e(2).

BTW,好像对于普通的Java Double类型,有没有log_2(double_value)直接计算的方法?

我的 Java 代码

BigInteger x = BigInteger.valueOf(16);
BigInteger y = BigInteger.valueOf((long)(Math.log(x.longValue()) / Math.log(2)));
System.out.println(y.doubleValue()); // return 4.0 as expected
Run Code Online (Sandbox Code Playgroud)

Jim*_*son 8

这是内置于BigIntegerAPI 中的。来自 Javadoc:

public int bitLength()
Run Code Online (Sandbox Code Playgroud)

返回 this 的最小二进制补码表示中的位数BigInteger,不包括符号位。对于正数BigIntegers,这相当于普通二进制表示中的位数。(计算(ceil(log2(this < 0 ? -this : this+1)))。)