Добавление двоичных чисел - PullRequest
15 голосов
/ 18 декабря 2011

Кто-нибудь знает, как добавить 2 двоичных числа, введенных как двоичные, в Java?

Например, 1010 + 10 = 1100.

Ответы [ 18 ]

39 голосов
/ 18 декабря 2011

Использование Integer.parseInt(String, int radix).

 public static String addBinary(){
 // The two input Strings, containing the binary representation of the two values:
    String input0 = "1010";
    String input1 = "10";

    // Use as radix 2 because it's binary    
    int number0 = Integer.parseInt(input0, 2);
    int number1 = Integer.parseInt(input1, 2);

    int sum = number0 + number1;
    return Integer.toBinaryString(sum); //returns the answer as a binary value;
}
19 голосов
/ 07 марта 2014

Чтобы погрузиться в основы:

public static String binaryAddition(String s1, String s2) {
    if (s1 == null || s2 == null) return "";
    int first = s1.length() - 1;
    int second = s2.length() - 1;
    StringBuilder sb = new StringBuilder();
    int carry = 0;
    while (first >= 0 || second >= 0) {
        int sum = carry;
        if (first >= 0) {
            sum += s1.charAt(first) - '0';
            first--;
        }
        if (second >= 0) {
            sum += s2.charAt(second) - '0';
            second--;
        }
        carry = sum >> 1;
        sum = sum & 1;
        sb.append(sum == 0 ? '0' : '1');
    }
    if (carry > 0)
        sb.append('1');

    sb.reverse();
    return String.valueOf(sb);
}
12 голосов
/ 18 декабря 2011

Мартейн абсолютно прав, чтобы прокрутить и завершить ответ

Integer.toBinaryString(sum);

выдаст ваш вывод в двоичном виде согласно OP-вопросу.

6 голосов
/ 20 мая 2014

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

Для этого примера вы можете просто сделать:

Integer.toString(0b1010 + 0b10, 2);

Это добавит два в двоичном виде и Integer.toString () со значением 2 в качестве второго параметра преобразует его обратно в двоичный.

3 голосов
/ 25 июля 2017

Оригинальное решение от Martijn не будет работать для больших двоичных чисел. Приведенный ниже код может быть использован для преодоления этого.

public String addBinary(String s1, String s2) {
    StringBuilder sb = new StringBuilder();
    int i = s1.length() - 1, j = s2.length() -1, carry = 0;
    while (i >= 0 || j >= 0) {
        int sum = carry;
        if (j >= 0) sum += s2.charAt(j--) - '0';
        if (i >= 0) sum += s1.charAt(i--) - '0';
        sb.append(sum % 2);
        carry = sum / 2;
    }
    if (carry != 0) sb.append(carry);
    return sb.reverse().toString();
}
1 голос
/ 18 февраля 2014

Еще один интересный, но долгий подход - преобразовать каждое из двух чисел в десятичное, добавив десятичные числа и преобразовав полученный ответ обратно в двоичный код!

1 голос
/ 19 февраля 2016

Java решение

static String addBinary(String a, String b) {

    int lenA = a.length();
    int lenB = b.length();
    int i = 0;

    StringBuilder sb = new StringBuilder();
    int rem = Math.abs(lenA-lenB);
    while(rem >0){
        sb.append('0');
        rem--;
    }
    if(lenA > lenB){
        sb.append(b);  
        b = sb.toString();
    }else{
        sb.append(a);
        a = sb.toString();
    }

    sb = new StringBuilder();
    char carry = '0';
    i = a.length();
    while(i > 0){
        if(a.charAt(i-1) == b.charAt(i-1)){
            sb.append(carry);
            if(a.charAt(i-1) == '1'){
                carry = '1';
            }else{
                carry = '0';
            }
        }else{
            if(carry == '1'){
                sb.append('0');
                carry = '1';
            }else{
                carry = '0';
                sb.append('1');
            }
        }
        i--;
    }

    if(carry == '1'){
        sb.append(carry);
    }

    sb.reverse();
    return sb.toString();

}
0 голосов
/ 05 января 2018
package Assignment19thDec;

import java.util.Scanner;

public class addTwoBinaryNumbers {

    private static Scanner sc;

    public static void main(String[] args) {

        sc = new Scanner(System.in);
        System.out.println("Enter 1st Binary Number");
        int number1=sc.nextInt();
        int reminder1=0;
        int number2=sc.nextInt();
        int reminder2=0;
        int carry=0;
        double sumResult=0 ;int add = 0
        ;
        int n;
        int power=0;
        while (number1>0 || number2>0) {

            /*System.out.println(number1 + " " +number2);*/

            reminder1=number1%10;
            number1=number1/10;
            reminder2=number2%10;
            number2=number2/10;
            /*System.out.println(reminder1 +"  "+ reminder2);*/


            if(reminder1>1 || reminder2>1 ) {
                System.out.println("not a binary number");
                System.exit(0);
            }

            n=reminder1+reminder2+carry;
            switch(n) {

            case 0: 
                    add=0; carry=0;                                 
                    break;                  
            case 1: add=1; carry=0;
                    break;
            case 2: add=0; carry=1;
                    break;
            case 3: add=1;carry=1;
                    break;
            default: System.out.println("not a binary number ");

            }

            sumResult=add*(Math.pow(10, power))+sumResult;
            power++;


        }

        sumResult=carry*(Math.pow(10, power))+sumResult;
        System.out.println("\n"+(int)sumResult);


    }

}
0 голосов
/ 07 июня 2019
import java.util.Scanner;
{
    public static void main(String[] args) 
    {
        String b1,b2;
        Scanner sc= new Scanner(System.in);
        System.out.println("Enter 1st binary no. : ") ;
        b1=sc.next();
        System.out.println("Enter 2nd binary no. : ") ;
        b2=sc.next();
        int num1=Integer.parseInt(b1,2);
        int num2=Integer.parseInt(b2,2);
        int sum=num1+num2;
        System.out.println("Additon is : "+Integer.toBinaryString(sum));
    }

}

0 голосов
/ 16 сентября 2017
import java.io.; 
import java.util.; 
public class adtbin {
  static Scanner sc=new Scanner(System.in); 
   public void fun(int n1) {
      int i=0; 
      int sum[]=new int[20]; 
      while(n1>0) { 
        sum[i]=n1%2; n1=n1/2; i++; 
      } 
      for(int a=i-1;a>=0;a--) { 
          System.out.print(sum[a]); 
      }  
   } 
   public static void main() { 
     int m,n,add; 
     adtbin ob=new adtbin(); 
     System.out.println("enter the value of m and n"); 
     m=sc.nextInt(); 
     n=sc.nextInt(); 
     add=m+n; 
     ob.fun(add); 
   } 
}
...