Java 如何将两个BigInteger变量作为无符号变量进行比较?
我有两个BigInteger变量,其值是从8字节数组初始化的:Java 如何将两个BigInteger变量作为无符号变量进行比较?,java,biginteger,Java,Biginteger,我有两个BigInteger变量,其值是从8字节数组初始化的: maxOne: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff midOne: 8000:8000:8000:8000:8000:8000:8000:8000 我想使用一个BigInteger比较方法,它将返回maxOne大于midOne 然而,我一直得到相反的结果。i、 e.midOne大于maxOne 在内部,我可以看到它们存储为: maxOne: mag[0]: 1 signum: -1 弥
maxOne: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
midOne: 8000:8000:8000:8000:8000:8000:8000:8000
我想使用一个BigInteger比较方法,它将返回maxOne大于midOne
然而,我一直得到相反的结果。i、 e.midOne大于maxOne
在内部,我可以看到它们存储为:
maxOne:
mag[0]: 1
signum: -1
弥敦
mag[0]: 7FFF7FFF
mag[1]: 7FFF7FFF
mag[2]: 7FFF7FFF
mag[3]: 7FFF8000
signum: -1
我认为当两者的signum=-1时,“较大的绝对”值小于“较小的绝对”值(例如,-3小于-1)
但出于某种原因,maxOne.compareTo(midOne)
返回-1
当检查它们的biginger.doubleValue()
时,我发现
maxOne = -1.0
midOne = -1.7013858727242528 E38
即使compareTo()使用doubleValue()进行比较,maxOne>midOne
那么,为什么比较结果正好相反呢
无论哪种方式,我都有兴趣将它们作为两个无符号整数进行比较。有没有办法做到这一点?我建议在最重要的位置放一个零字节。这样在创建BigInteger时就不会有符号位出现。@OHGODSPIDERS
abs()
只会对signum
求反,所以compareTo()会不断返回midOne大于maxOne。这是个好主意。工作起来很有魅力。