2013-10-26 2 views
5

Я пытаюсь сделать программу для вычисления дополнения 1 после ввода двоичного числа. Это то, что я должен далеко:Поиск дополнения 1

import java.util.Scanner; 
public class BitWiseComplement { 
    public static void main(String[] args) { 
     Scanner keysIn = new Scanner(System.in); 
     System.out.println("Please enter your number: "); 
     long originalNum = keysIn.nextLong(); 
     System.out.println(~originalNum); 
    } 
} 

Однако, когда я вхожу 0111011, я получаю -111012. Я думал, что оператор ~ должен был инвертировать число так, чтобы все 0s были 1s и все 1s равны 0s.

Любая помощь?

+1

Первый бит - это знак. Вместо этого используйте unsigned. – ceving

+4

@ceving Java не имеет длинный тип без знака. – Boann

+1

@Boann Не проходит ни одного дня, что я не узнаю что-то новое, что Java не может. – ceving

ответ

10

Вы предположительно хотите работать в двоичном коде, так что попробуйте:

Scanner keysIn = new Scanner(System.in); 
System.out.print("Please enter your number: "); 

long originalNum = keysIn.nextLong(2); // specify radix of 2 
System.out.println(Long.toBinaryString(~originalNum)); // print binary string 

keysIn.close(); 
 
Please enter your number: 0111011 
1111111111111111111111111111111111111111111111111111111111000100 

Как вы можете видеть, все биты перевернуто. Имейте в виду, что впереди введенного двоичного номера есть ведущие 0s.

+0

.. и поэтому мы все все правильно? Потому что 0 не отображаются, но они есть. Спасибо, кстати! – user2913004

+0

Единственным дополнением к 0111011 является 1000100, но почему существует так много 1 с ответом и как я могу избавиться от них? – Lokesh

2

Оператор ~ делает то, что вы думаете, но имейте в виду, что в Java нет беззнаковых типов, поэтому, когда вы вводите положительное число (т. Е. Высокий бит равен 0), применяя ~, он сделает это отрицательный (путем включения высокой бит).

Если вы должны были напечатать номер в шестнадцатеричном формате (или в двоичном формате, как предложили другие ответы), вы должны увидеть ответ, который вы ожидаете.

 Смежные вопросы

  • Нет связанных вопросов^_^