Метод двойного дополнения - PullRequest
0 голосов
/ 08 ноября 2018

Мне нужна помощь в написании метода, который принимает int num и возвращает двоичное дополнение num как int с использованием побитовых операторов в Java.

public int twosComplement(int num) {
}

Я могу написать метод, используя строки и "Integer.toBinaryString" и "Integer.parseInt", но я не могу использовать побитовые операторы, поскольку, когда я использую "Integer.toBinaryString" для отрицательного числа, полученная строка слишком длинный для "Integer.parseInt", и я получаю исключение:

Exception in thread "main" java.lang.NumberFormatException: For input
string: "1111111111111100000001111111111111111111110000000"

    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.base/java.lang.Integer.parseInt(Integer.java:652)
    at java.base/java.lang.Integer.parseInt(Integer.java:770)

1 Ответ

0 голосов
/ 08 ноября 2018

Основная причина, скорее всего, заключается в том, что Integer.ParseInt без оснований обрабатывает строку как десятичное число. Итак, ваши «111 000 101 010 000» рассматриваются в миллиардах (или что-то в этом роде) ..

Нужно передать в 2 для двоичного файла.

int value = Integer.parseInt(binaryGuy, 2);

Однако нужно быть осторожным с Integer.MAX_VALUE, если бит знака установлен (то есть отрицательное число) или может использовать Long.parseLong или BigInteger (String s, int radix)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...