如何比较两个无符号的 BigInteger 变量?

How to Compare two BigInteger variables as unsigned?

我有两个 BigInteger 变量,它们的值是从 8 字节数组初始化的:

maxOne: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
midOne: 8000:8000:8000:8000:8000:8000:8000:8000

我想使用 BigInteger 比较方法 return 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

我认为 "larger absolute" 的值小于 "smaller absolute" 的值,因为它们的符号都为 -1(例如 -3 小于 -1)。

但由于某些原因,maxOne.compareTo(midOne) returns -1。

检查他们的 BigInteger.doubleValue() 时,我看到

maxOne = -1.0
midOne = -1.7013858727242528 E38

即使 compareTo() 使用 doubleValue() 进行比较,maxOne > midOne。

那么,为什么比较 return 相反?

无论如何,我有兴趣将它们作为两个 无符号整数 进行比较。有办法实现吗?

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