Кажется, у меня есть проблема с дополнением до двух с Java BigInteger. У меня есть 64-битное целое число, в котором только старший бит и второй старший бит установлены в 1, остальное равно 0.
В десятичном виде получается: -4611686018427387904.
Сторона Java моего приложения получает это десятичное число в виде строки и преобразует его в BigInteger следующим образом:
BigInteger bi = new BigInteger("-4611686018427387904", 10);
Затем ему необходимо отобразить это число как в двоичной, так и в шестнадцатеричной форме. Я пытался использовать:
String bin = bi.toString(2);
String hex = bi.toString(16);
но я получаю:
-100000000000000000000000000000000000000000000000000000000000000
-4000000000000000
тогда как я ожидаю получить:
1100000000000000000000000000000000000000000000000000000000000000
c000000000000000
Какие-нибудь советы?
BigInteger
, а неlong
? - person Jon Skeet   schedule 28.06.2011