Java Biginteger给出了不正确的结果



从这篇文章的长度上,我了解的是 bitlength()会给你

最小两次补充的位数 这个biginteger

但是,当我运行以下程序输出时 0 我希望此输出为 1 作为数字 0 由一位表示,我很困惑,请在这里感到困惑,请在此处帮助

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

如Javadoc中所述:

计算(ceil(log2(this < 0 ? -this : this+1)))

this >= 0以来,它计算ceil(log2(1))log_anything(1) == 0ceil(0) == 0


您在评论中询问:"当时如何零表示:(它必须需要内存深处的东西"。

a表示零的 BigInteger显然在内存中确实具有一定的表示。但是您可以将其视为某种概念类型的数组bit,即bit[]。零可以用零长度阵列new bit[]{}表示(但也可以是new bit[]{0}new bit[]{0, 0}等(。

对于一个数组,在Java中的长度为零是可以的(在规格中特别称为空数组(。这样的数组的元素为零,但是内存中的尺寸非零,因为它需要存储在某个地方的数组的长度(以及其他用于管家的东西(。

bitLength()是此数组的最小长度。零长度并不意味着该数组在内存中没有空间,只是其元素没有附加 space。

最新更新