Преобразование из 32-разрядного двоичного дополнения в десятичную с использованием Java

1

У меня возникли проблемы с поиском способа преобразования из 32-битного двоичного числа с двумя дополнениями в десятичное число в java. Я либо получаю ошибку переполнения, либо число выводится неотрицательно, когда оно должно быть отрицательным.

String bin = "11111111111111111111111111111110";
long foo = Long.parseLong(bin);
System.out.println(foo);

Это одна из вещей, которые я пробовал, и я думал, что мне нужно долго использовать, потому что она может содержать до 64 бит. Любая помощь будет большой. благодаря

  • 1
    32-разрядное двоичное двоичное число с дополнением до двоичного числа - это int .
Теги:

3 ответа

0
Лучший ответ

radix - основа используемой системы нумерации.

public static void main(String[] args) {
        int bits = (int) Long.parseLong("11111111111111111111111111111110", 2);
        System.out.println(bits);
    }

вывод

-2
2

Вам нужно предоставить базу или радиус из двух, если вы хотите проанализировать двоичное значение.

long foo = Long.parseLong(bin, 2);

Вы можете увидеть пример на странице документа Java:

parseLong("1100110", 2) возвращает 102L.

Без радиуса он использует base-10, а 10 32 не вписывается в long.

Имейте в виду, что для 32-символьной битовой строки это даст вам неподписанный вариант. Если вы хотите, чтобы подписанный вариант был long, вы можете использовать:

if (foo > 0x7fffffffL) foo = -(0x100000000L - foo);

затем отрегулировать его

Или вы можете принудительно передать его целому числу, если это подходит:

int foo = (int)Long.parseLong(bin,2);

Требование, чтобы Integer.parseInt() было присвоено знаковое число, означает, что оно не подходит как-для 32-символьных двоичных строк с самым левым 1-битным.

0

Вы правы - вам нужно использовать "Long" в этом случае.

Поскольку вы делаете два дополнения (не дополнение), вы можете использовать "parseLong()" с радиусом "2":

public class X {

  public static void main (String[] args) {
    String bin = "11111111111111111111111111111110";
    int i = (int)Long.parseLong(bin, 2);
    System.out.println("parseInt(" + bin + ", 2)=" + i);
  }

}
// Output:
parseInt(11111111111111111111111111111110, 2)=-2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню