gpt4 book ai didi

java - 存储在 BigInteger 中并检索回来时出现数字问题

转载 作者:行者123 更新时间:2023-12-02 00:38:56 24 4
gpt4 key购买 nike

BigInteger bx=new BigInteger("5888561920");

System.out.println("bx:"+bx);

byte x[]=new byte[5];

x=bx.toByteArray();

for(k=4;cnt<4;k--)
{

cnt++;

t[k-1]=x[k];
}

for(i=0;i<4;i++)

System.out.print(" "+t[i]);

System.out.println("\nbig: "+toInt(t));

上述代码的输出是:

bx:5888561920

94 -4 83 0

big: 1593594624

这里的问题是,当我将一个大整数转换为字节数组并再次将相同的字节数组转换为大整数时,大整数的值正在改变。但是,当我用“2944280960”或“3806908688”替换数字“5888561920”时,没有问题,我得到与输出相同的数字。这里有什么问题?问题是 BigInteger 还是“5888561920”

我自己写了toInt方法:

public static BigInteger toInt(byte[] b){

String st=new String();
for(int k=3;k>=0;k--){
for(int i=0;i<8;i++)
{
if ((b[k] & 0x01) == 1)
{
st="1"+st;
}
else
{
st="0"+st;
}
b[k]= (byte) (b[k] >> 1);
}
}

BigInteger bi=new BigInteger(st,2);

return bi;
}

最佳答案

在 toInt() 中,您将连接数字的 32 个最低有效位 (k=0..3 x i=0..7)。

5888561920 大于 32 位数字。事实上,它的二进制表示形式(根据 Windows Calc)是 101011110111111000101001100000000,长度为 33 位。您已经截断了最高有效位。

2944280960 和 3806908688 适合 32 位(无论如何,第 33 位及以后的位都为零)。

所以我猜你确实需要第五个字节,毕竟:)

关于java - 存储在 BigInteger 中并检索回来时出现数字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951926/

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