如何将两个BigInteger变量比较为unsigned?

时间:2018-02-12 15:47:29

标签: 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。

但是,我一直在反其道而行之。即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。

那么,为什么比较会反过来呢?

无论哪种方式,我都有兴趣将它们比作两个无符号整数。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:3)

我建议在最重要的地方放置一个零字节。因此在创建BigInteger时不会出现任何符号位。

相关问题