'bigInteger`的`bitCount()`和`bitLength()`有什么区别?

Old*_*eon 6 java

的描述比特计数()和位长度()是非常模糊的:

public int bitCount()

返回此BigInteger的二进制补码表示中与其符号位不同的位数.在BigIntegers上实现位向量样式集时,此方法很有用.

返回:此BigInteger的二进制补码表示中的位数与其符号位不同.


public int bitLength()

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

返回:此BigInteger的最小二进制补码表示中的位数,不包括符号位.

这两种方法之间的真正区别是什么?我何时应该使用哪种方法?

我bitCount偶尔会用一个正整数来计算设置位的数量,但我很少使用bitLength,通常在我的意思是bitCount因为描述之间的差异太微妙,我不能立即理解.

Google Attractor: Java BigInteger bitCount vs bitLength

Old*_*eon 10

快速演示:

public void test() {
    BigInteger b = BigInteger.valueOf(0x12345L);
    System.out.println("b = " + b.toString(2));
    System.out.println("bitCount(b) = " + b.bitCount());
    System.out.println("bitLength(b) = " + b.bitLength());
}
Run Code Online (Sandbox Code Playgroud)

版画

b = 10010001101000101

bitCount(b)= 7

bitLength(b)= 17

所以,对于正整数:

bitCount()返回数字中的设置位数.

bitLength()返回最高设置位的位置, 即 数字的二进制表示的长度(即log 2).