Java BigInteger 给出的结果不正确

Java BigInteger is giving In-Correct result

由此post我的理解是bitlength()会给你

the number of bits in the minimal two's-complementrepresentation of this BigInteger

然而当我运行下面的程序输出是 0 我期望此输出为 1 因为数字 0 由一位表示,我是在这里困惑请帮忙

public class Test {
    public static void main(String[] args) {
        int l = BigInteger.valueOf(0L).bitLength();
        System.out.println(l);
    }
}

Javadoc 中所述:

Computes (ceil(log2(this < 0 ? -this : this+1))).

由于 this >= 0,它计算 ceil(log2(1))log_anything(1) == 0ceil(0) == 0


你问"how is zero represented then :( It must require something deep down in memory".

A BigInteger 表示零,显然,在内存中确实有一些表示。但您可以将其视为某种概念类型的数组,bit,即 bit[]。零可以用 zero-length 数组 new bit[]{} 表示(但也可以是 new bit[]{0}new bit[]{0, 0} 等)。

数组在 Java 中的长度为零是可以的(在规范中专门称为 empty array)。这样的数组有零个元素,但它在内存中有 non-zero 大小,因为它需要将数组的长度存储在某处(以及其他用于内务处理的东西)。

bitLength() 是此数组的最小 长度。零长度并不意味着数组在内存中没有 space,只是它的元素没有 additional space.