Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中返回奇怪值的BigInteger.toByteArray()_Java_Bytearray_Biginteger - Fatal编程技术网

在java中返回奇怪值的BigInteger.toByteArray()

在java中返回奇怪值的BigInteger.toByteArray(),java,bytearray,biginteger,Java,Bytearray,Biginteger,我正在用随机值的大整数做实验 BigInteger bi1 = new BigInteger("365375409332725729550921208179070754913983135742"); BigInteger bi2 = new BigInteger("386718480727050819604290866521372728863001258687"); byte[] bytesBi1 = bi1.toByteArray(); byte[] bytesBi2 = bi2.toByt

我正在用随机值的大整数做实验

BigInteger bi1 = new BigInteger("365375409332725729550921208179070754913983135742");
BigInteger bi2 = new BigInteger("386718480727050819604290866521372728863001258687");

byte[] bytesBi1 = bi1.toByteArray();
byte[] bytesBi2 = bi2.toByteArray();
第一种是产生奇异值的。 第二个没问题

有人能解释一下我做错了什么吗

编辑

结果如下:

bytesBi1 = [63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2]
bytesBi2 = [67, -67, 14, 113, -94, 16, -120, 82, 84, 95, -127, -124, -90, -33, 29, -102, 90, 125, -86, -65]

我用自己实现的任意精度数字测试了给定的数字。
字节值是完全正确的,因此可能只是随机数生成器出错、质量不好或出现异常值的情况。

我用自己实现的任意精度数字测试了给定的数字。 字节值完全正确,因此可能只是随机数生成器出错、质量不好或出现异常值。

BigInteger的toByteArray方法返回数字的表示形式

您得到的值实际上是您输入的数字的正确的2的补码表示形式。

BigInteger的toByteArray方法返回数字的表示形式


您得到的值实际上是您输入的数字的正确的2的补码表示形式。

这是bi1的十六进制内部表示形式,您可以在调试器中看到它

mag[0] = 3FFFFFFF 
mag[1] = FFFFFFFF 
mag[2] = FFFFFFFF 
mag[3] = FFFFFFFF 
mag[4] = 00000001 
如果将每个DWORD拆分为4个字节,并取每个字节的补数, 你得到你的数字

例如,对于第一行:mag[0]=3F,FF,FF,FF在十进制表示法中变成63,-1,-1


所以你的输出没有问题

这是bi1的十六进制内部表示,您可以在调试器中看到它

mag[0] = 3FFFFFFF 
mag[1] = FFFFFFFF 
mag[2] = FFFFFFFF 
mag[3] = FFFFFFFF 
mag[4] = 00000001 
如果将每个DWORD拆分为4个字节,并取每个字节的补数, 你得到你的数字

例如,对于第一行:mag[0]=3F,FF,FF,FF在十进制表示法中变成63,-1,-1


所以你的输出没有问题

你说奇怪的价值是什么意思。你能详细说明一下吗?也许可以展示一些代码。干杯你的意思是它在数组中给出负数吗?如果是这样的话,这是因为Java中的字节是有符号的字节。我不明白为什么bytesBi1有这个值。嗯,在十六进制中,这个值应该是0x3FFFFFFFFFFFFFFFE,再多一些fffe。这里到底有什么奇怪的地方?这就像x^2-2形式的数字,对于正x,看起来像。@RemiWilde,我很好奇。你得到bi1的字符串数据了吗?哪个程序生成了这个字符串?你是怎么使用那个特殊的数字序列的?你说奇怪的值是什么意思。你能详细说明一下吗?也许可以展示一些代码。干杯你的意思是它在数组中给出负数吗?如果是这样的话,这是因为Java中的字节是有符号的字节。我不明白为什么bytesBi1有这个值。嗯,在十六进制中,这个值应该是0x3FFFFFFFFFFFFFFFE,再多一些fffe。这里到底有什么奇怪的地方?这就像x^2-2形式的数字,对于正x,看起来像。@RemiWilde,我很好奇。你得到bi1的字符串数据了吗?哪个程序生成了这个字符串?你是怎么碰巧使用了那个特殊的数字序列的?