gpt4 book ai didi

java - 为什么 bigInteger 没有 -1 的位长?

转载 作者:行者123 更新时间:2023-12-03 18:42:06 24 4
gpt4 key购买 nike

为什么 BigInteger.bitLength() 在 Java 中为 -1 打印 0:

System.out.println(BigInteger.valueOf(-1).bitLength());

在 BigInteger 的源代码中有一条评论说:

bitLength not initialized yet

public int bitLength() {
int n = bitLengthPlusOne - 1;
if (n == -1) { // bitLength not initialized yet
int[] m = mag;
int len = m.length;
if (len == 0) {
n = 0; // offset by one to initialize
}

最佳答案

查看 BigInteger.bitLength() 的文档方法:

Returns the number of bits in the minimal two's-complement representation of this BigInteger, excluding a sign bit. [...]

您需要零“值”位来表示值 0。基本上,您“不需要做任何事情”并且您拥有值 0。使用符号位,您可以在 0-1 之间切换(类似于二进制补码)。

当您有值 1 时,您需要一个“值”位,因此 BigInteger.bitLength() 将为 BigInteger 返回 11。检查以下 for 循环及其生成的输出:

for (int i=-16; i<=16; i++) {
BigInteger x = BigInteger.valueOf(i);
System.out.println(x+"| bitlength: "+x.bitLength());
}

输出是:

-16| bitlength: 4
-15| bitlength: 4
-14| bitlength: 4
-13| bitlength: 4
-12| bitlength: 4
-11| bitlength: 4
-10| bitlength: 4
-9| bitlength: 4
-8| bitlength: 3
-7| bitlength: 3
-6| bitlength: 3
-5| bitlength: 3
-4| bitlength: 2
-3| bitlength: 2
-2| bitlength: 1
-1| bitlength: 0
0| bitlength: 0 /* 0b */
1| bitlength: 1 /* 0b1 */
2| bitlength: 2
3| bitlength: 2 /* 0b11 */
4| bitlength: 3
5| bitlength: 3
6| bitlength: 3
7| bitlength: 3 /* 0b111 */
8| bitlength: 4
9| bitlength: 4
10| bitlength: 4
11| bitlength: 4
12| bitlength: 4
13| bitlength: 4
14| bitlength: 4
15| bitlength: 4 /* 0b1111 */
16| bitlength: 5

关于java - 为什么 bigInteger 没有 -1 的位长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com