2016-02-08 2 views
1

Для чистого удовольствия и в свое время я пытаюсь узнать больше о двоичных числах и сборке. Я был в местной библиотеке, проверяя некоторые книги, чтобы получить более полное представление о двоичных числах и добавлении. Я даже не знал до нескольких недель назад, можно добавить двоичные числа с Java. Я споткнулся и был на два дня на этом.Выполнение двоичного сложения и вычитания с подписанными двоичными числами в Java

Как я уже сказал, я пытаюсь добавить двоичные числа в дополнение и вычитание. Я предполагаю, что мне нужно разобрать все, чтобы оно работало правильно. Я чувствую, что сейчас что-то смотрю. Что именно отсутствует? Любая помощь полезна.

Как прямо сейчас, у меня есть это:

`import java.util.Scanner; 
public class binary operation { 
public static void main(String[]args){ 
    Scanner keyboard = new Scanner(System.in); 
    boolean keepGoing = true; 
    String binary1, binary2; 
    int num1, num2; 

    System.out.println("Scenario: Choose (A)dd, (S)ubtract, (E)xit"); 
    char choice = keyboard.next().charAt(0); 
    while(keepGoing){ 
     if (choice == 'A' || choice == 'a'){ 
      System.out.println("Enter 8-bit signed binary number: "); 
      binary1 = keyboard.next(); 
      System.out.println("Enter another binary number: "); 
      binary2 = keyboard.next(); 
      num1 = Integer.parseInt(binary1, 2); 
      num2 = Integer.parseInt(binary2, 2); 
      int sum = num1 + num2; 
      System.out.println(Integer.toBinaryString(sum)); 
     } 
     else if(choice == 'S' || choice == 's'){ 
      System.out.println("Enter 8-bit signed binary number: "); 
      binary1 = keyboard.next(); 
      System.out.println("Enter another binary number: "); 
      binary2 = keyboard.next(); 
      num1 = Integer.parseInt(binary1, 4); 
      num2 = Integer.parseInt(binary2, 4); 
      int difference = num1 - num2; 
      System.out.println(Integer.toBinaryString(difference)); 
     } 
     else if(choice == 'E' || choice == 'e'){ 
      System.out.println("Thank you."); 
      keepGoing = false; 
      System.exit(0); 
     } 
     if(keepGoing){ 
      System.out.println("Choose (A)dd, (S)ubtract, (E)xit"); 
      choice = keyboard.next().charAt(0); 
     } 
    } 
+0

Примечание: ваше вычитание основывается на базе 4 вместо основания 2. –

ответ

0

toBinaryString всегда печатает как 32-разрядное беззнаковое значение. Вам нужен такой метод.

public static String toSignedBinary(int num) { 
    return num < 0 ? "-" + Long.toBinaryString(-(long) num) : Integer.toBinaryString(num); 
} 
Смежные вопросы