我有两个BigInteger变量,其值从8个字节数组初始化:
maxOne: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
midOne: 8000:8000:8000:8000:8000:8000:8000:8000
我想使用一个BigInteger比较方法,它将返回maxOne大于midOne。
然而,我总是得到相反的结果。即midOne大于maxOne。
在内部,我可以看到它们存储为:
maxOne:
mag[0]: 1
signum: -1
midOne
mag[0]: 7FFF7FFF
mag[1]: 7FFF7FFF
mag[2]: 7FFF7FFF
mag[3]: 7FFF8000
signum: -1
当两者都具有signum=-1 (例如-3小于-1)时,我会认为“较大的绝对值”小于“较小的绝对”值。
但出于某种原因,maxOne.compareTo(midOne)
返回-1。
在检查他们的BigInteger.doubleValue()
时,我发现
maxOne = -1.0
midOne = -1.7013858727242528 E38
即使compareTo()使用doubleValue()进行比较,maxOne > midOne。
那么,为什么比较结果正好相反呢?
无论哪种方法,我都有兴趣将它们作为两个无符号整数进行比较。有办法做到这一点吗?
发布于 2018-02-12 07:59:56
我建议把一个零字节放在最重要的位置。这样,在创建BigInteger时,就不会出现任何符号位。
https://stackoverflow.com/questions/48750285
复制相似问题