Как сравнить две переменные BigInteger как беззнаковые?


У меня есть две переменные BigInteger, значения которых инициализируются из 8-байтовых массивов:

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

Я хотел бы использовать метод сравнения BigInteger, который вернет, что maxOne больше, чем midOne.

Однако я продолжаю получать противоположное. то есть мидон больше, чем Максон.

Внутренне я мог видеть, что они хранятся как:

Максон:

mag[0]: 1
signum: -1

Мидон

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 2

1 ответ:

Я предлагаю поместить нулевой байт в самое значительное место. Так что ни один знаковый бит не может вкрасться при создании BigInteger.