如何比较两个无符号的 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 时就不会出现任何符号位。
我有两个 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 时就不会出现任何符号位。