gpt4 book ai didi

java - 为什么在 BigInteger 中会发生这种情况

转载 作者:行者123 更新时间:2023-11-29 06:10:48 25 4
gpt4 key购买 nike

BigInteger bx=new BigInteger("3806908688");

byte x[]=new byte[4];

String s=bx.toString(10);

System.out.println("string: "+s);

x=s.getBytes();

int l=0,i=0;

l |= x[i] & 0xFF;

l <<= 8;

l |= x[i+1] & 0xFF;

l <<= 8;

l |= x[i+2] & 0xFF;

l <<= 8;

l |= x[i+3] & 0xFF;

System.out.println(l);

输出是 859320374 而不是 3806908688。当我将 BigInteger 转换为字节数组并将该字节数组打印为整数时,为什么会发生这种情况

我也试过使用 bx.toByteArray() 但结果是一样的

最佳答案

如果您必须手动执行,请循环执行:

// Take care of negative values
long l = (bigInt.compareTo(BigInteger.ZERO) < 0) ? -1 : 0;
byte[] array = bigInt.toByteArray();
for(int i=0; i<array.length-1; i++) {
l |= array[i] & 0xFF;
l <<= 8;
}
l |= array[array.length-1] & 0xFF;

或者,您可以只使用 BigInteger 提供的方法:

int someInt = bigInt.intValue();
long someLong = bigInt.longValue();

关于java - 为什么在 BigInteger 中会发生这种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6936640/

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