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) == 0
和 ceil(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.
由此postbitlength()
会给你
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) == 0
和 ceil(0) == 0
。
你问
A BigInteger
表示零,显然,在内存中确实有一些表示。但您可以将其视为某种概念类型的数组,bit
,即 bit[]
。零可以用 zero-length 数组 new bit[]{}
表示(但也可以是 new bit[]{0}
、new bit[]{0, 0}
等)。
数组在 Java 中的长度为零是可以的(在规范中专门称为 empty array)。这样的数组有零个元素,但它在内存中有 non-zero 大小,因为它需要将数组的长度存储在某处(以及其他用于内务处理的东西)。
bitLength()
是此数组的最小 长度。零长度并不意味着数组在内存中没有 space,只是它的元素没有 additional space.