代码之家  ›  专栏  ›  技术社区  ›  datv

如何将两个BigInteger变量作为无符号变量进行比较?

  •  2
  • datv  · 技术社区  · 8 年前

    我有两个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
    

    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 回复  |  直到 8 年前
        1
  •  3
  •   user2496748    8 年前

    我建议在最重要的位置放一个零字节。这样在创建BigInteger时就不会有符号位进入。