Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加二进制数_Java_Binary_Decimal_Addition - Fatal编程技术网

Java 添加二进制数

Java 添加二进制数,java,binary,decimal,addition,Java,Binary,Decimal,Addition,有人知道如何在Java中添加2个二进制数吗 例如,1010+10=1100使用 Martijn是绝对正确的,背负并完成了答案 Integer.toBinaryString(sum); 将根据OP问题以二进制形式给出您的输出。另一个有趣但冗长的方法是将两个数字中的每一个转换为十进制,添加十进制数字,并将获得的答案转换回二进制 要深入了解基本面: public class BinaryArithmetic { /*-------------------------- add ------

有人知道如何在Java中添加2个二进制数吗

例如,
1010+10=1100

使用


Martijn是绝对正确的,背负并完成了答案

Integer.toBinaryString(sum);

将根据OP问题以二进制形式给出您的输出。

另一个有趣但冗长的方法是将两个数字中的每一个转换为十进制,添加十进制数字,并将获得的答案转换回二进制

要深入了解基本面:

public class BinaryArithmetic {

    /*-------------------------- add ------------------------------------------------------------*/
    static String add(double a, double b) {
        System.out.println(a + "first val :" + b);
        int a1 = (int) a;
        int b1 = (int) b;
        String s1 = Integer.toString(a1);
        String s2 = Integer.toString(b1);
        int number0 = Integer.parseInt(s1, 2);
        int number1 = Integer.parseInt(s2, 2);

        int sum = number0 + number1;
        String s3 = Integer.toBinaryString(sum);

        return s3;
    }
    /*-------------------------------multiply-------------------------------------------------------*/

    static String multiply(double a, double b) {
        System.out.println(a + "first val :" + b);
        int a1 = (int) a;
        int b1 = (int) b;
        String s1 = Integer.toString(a1);
        String s2 = Integer.toString(b1);
        int number0 = Integer.parseInt(s1, 2);
        int number1 = Integer.parseInt(s2, 2);

        int sum = number0 * number1;
        String s3 = Integer.toBinaryString(sum);

        return s3;
    }
    /*----------------------------------------substraction----------------------------------------------*/

    static String sub(double a, double b) {
        System.out.println(a + "first val :" + b);
        int a1 = (int) a;
        int b1 = (int) b;
        String s1 = Integer.toString(a1);
        String s2 = Integer.toString(b1);
        int number0 = Integer.parseInt(s1, 2);
        int number1 = Integer.parseInt(s2, 2);

        int sum = number0 - number1;
        String s3 = Integer.toBinaryString(sum);

        return s3;
    }

    /*--------------------------------------division------------------------------------------------*/
    static String div(double a, double b) {
        System.out.println(a + "first val :" + b);
        int a1 = (int) a;
        int b1 = (int) b;
        String s1 = Integer.toString(a1);
        String s2 = Integer.toString(b1);
        int number0 = Integer.parseInt(s1, 2);
        int number1 = Integer.parseInt(s2, 2);

        int sum = number0 / number1;
        String s3 = Integer.toBinaryString(sum);

        return s3;
    }
}
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);
}

我试着让它变得简单这是我必须处理的事情我的密码prj它不是有效的,但我希望它

    public String binarysum(String a, String b){
    int carry=0;
    int maxim;
    int minim;
    maxim=Math.max(a.length(),b.length());
    minim=Math.min(a.length(),b.length());         
    char smin[]=new char[minim];
    char smax[]=new char[maxim];
    if(a.length()==minim){
     for(int i=0;i<smin.length;i++){
     smin[i]=a.charAt(i);
      }
      for(int i=0;i<smax.length;i++){
       smax[i]=b.charAt(i);
      }
      }
      else{
          for(int i=0;i<smin.length;i++){
          smin[i]=b.charAt(i);
             }
       for(int i=0;i<smax.length;i++){
       smax[i]=a.charAt(i);
      } 
      }
    char[]sum=new char[maxim];
    char[] st=new char[maxim];
    for(int i=0;i<st.length;i++){
    st[i]='0';
    }
    int k=st.length-1;
   for(int i=smin.length-1;i>-1;i--){
    st[k]=smin[i];
    k--;
    } 

     //   *************************** sum begins here
   for(int i=maxim-1;i>-1;i--){
   char x= smax[i];
   char y= st[i];
    if(x==y && x=='0'){
         if(carry==0)
             sum[i]='0';
         else if(carry==1){
             sum[i]='1';
             carry=0;
    }
   }
    else if(x==y && x=='1'){
        if(carry==0){
            sum[i]='0';
            carry=1;
        }
        else if(carry==1){
          sum[i]='1';
          carry=1;
        }
     }
     else if(x!=y){
        if(carry==0){
            sum[i]='1';
            }
        else if(carry==1){
          sum[i]='0';
          carry=1;
        }
       }        }
      String s=new String(sum);
     return s;
      }
公共字符串二进制和(字符串a、字符串b){
整数进位=0;
int-maxim;
最小整数;
maxim=数学最大值(a.长度(),b.长度());
minim=Math.min(a.length(),b.length());
字符smin[]=新字符[最小值];
字符smax[]=新字符[maxim];
如果(a.长度()=最小值){

对于(inti=0;i,您可以将0b放在二进制数前面,以指定它是二进制数

对于本例,您只需执行以下操作:

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

这将在二进制中添加这两个变量,第二个参数为2的Integer.toString()将其转换回二进制

def binAdd(s1, s2):
    if not s1 or not s2:
        return ''

    maxlen = max(len(s1), len(s2))


    s1 = s1.zfill(maxlen)
    s2 = s2.zfill(maxlen)

    result  = ''
    carry   = 0

    i = maxlen - 1
    while(i >= 0):
        s = int(s1[i]) + int(s2[i])
        if s == 2: #1+1
            if carry == 0:
                carry = 1
                result = "%s%s" % (result, '0')
            else:
                result = "%s%s" % (result, '1')
        elif s == 1: # 1+0
            if carry == 1:
                result = "%s%s" % (result, '0')
            else:
                result = "%s%s" % (result, '1')
        else: # 0+0
            if carry == 1:
                result = "%s%s" % (result, '1')
                carry = 0   
            else:
                result = "%s%s" % (result, '0') 

        i = i - 1;

    if carry>0:
        result = "%s%s" % (result, '1')
    return result[::-1]

实际上,我没有使用
stringbuilder()
函数就找到了这个问题的解决方案。请查看:

public void BinaryAddition(String s1,String s2)
{
    int l1=s1.length();int c1=l1;
    int l2=s2.length();int c2=l2;
    int max=(int)Math.max(l1,l2);
    int arr1[]=new int[max];
    int arr2[]=new int[max];
    int sum[]=new int[max+1];
    for(int i=(arr1.length-1);i>=(max-l1);i--)
    {
        arr1[i]=(int)(s1.charAt(c1-1)-48);
        c1--;
    }
    for(int i=(arr2.length-1);i>=(max-l2);i--)
    {
        arr2[i]=(int)(s2.charAt(c2-1)-48);
        c2--;
    }
    for(int i=(sum.length-1);i>=1;i--)
    {
        sum[i]+=arr1[i-1]+arr2[i-1];
        if(sum[i]==2)
        {
            sum[i]=0;
            sum[i-1]=1;
        }
        else if(sum[i]==3)
        {
            sum[i]=1;
            sum[i-1]=1;
        }
    }
    int c=0;
    for(int i=0;i<sum.length;i++)
    {
        System.out.print(sum[i]);
    }
}
公共void二进制添加(字符串s1、字符串s2)
{
int l1=s1.length();int c1=l1;
int l2=s2.length();int c2=l2;
int max=(int)Math.max(l1,l2);
int arr1[]=新的int[max];
int arr2[]=新的int[max];
整数和[]=新整数[max+1];
对于(int i=(arr1.length-1);i>=(max-l1);i--)
{
arr1[i]=(int)(s1.字符(c1-1)-48);
c1--;
}
对于(int i=(arr2.length-1);i>=(max-l2);i--)
{
arr2[i]=(int)(s2.字符(c2-1)-48);
c2--;
}
对于(int i=(sum.length-1);i>=1;i--)
{
和[i]+=arr1[i-1]+arr2[i-1];
如果(和[i]==2)
{
和[i]=0;
和[i-1]=1;
}
else if(总和[i]==3)
{
和[i]=1;
和[i-1]=1;
}
}
int c=0;
对于(inti=0;iJava解决方案

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();

}
类和{
公共整数;
公共运输;
总和(整数,整数进位){
这个数字=数字;
这个。进位=进位;
}
}
公共字符串addBinary(字符串a、字符串b){
int lengthOfA=a.长度();
int lengthOfB=b.长度();
如果(lengthOfA>lengthOfB){
对于(inti=0;i
importjava.util.*;
公共类比特添加{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪sc=新的扫描仪(System.in);
int len=sc.nextInt();
int[]arr1=新的int[len];
int[]arr2=新的int[len];
int[]和=新的int[len+1];
数组。填充(和,0);

对于(int i=0;i而言,一种简单的方法如下:

  • 将两个字符串转换为char[]数组,并将进位设置为0
  • 设置for循环中的最小数组长度
  • 从最后一个索引开始循环,并将其递减
  • 检查两个数组中每个元素的二进制加法的4个条件(0+0=0,0+1=1,1+0=1,1+1=10(进位=1)),并相应地重置进位
  • 将添加内容追加到stringbuffer中
  • 将最大大小数组中的元素追加到StrimeBuffor,但检查考虑进位,同时追加< /LI>
  • 按与答案相反的顺序打印stringbuffer
  • //java代码如下所示

    static String binaryAdd(String a, String b){
        int len = 0;
        int size = 0;
        char[] c1 = a.toCharArray();
        char[] c2 = b.toCharArray();
        char[] max;
    
    
        if(c1.length > c2.length){
            len = c2.length;
            size = c1.length;
            max = c1;
        }       
        else
        {
            len = c1.length;
            size = c2.length;
            max = c2;
        }
    
        StringBuilder sb = new StringBuilder();
        int carry = 0;
        int p = c1.length - 1;
        int q = c2.length - 1;
    
        for(int i=len-1; i>=0; i--){
            if(c1[p] == '0' && c2[q] == '0'){
                if(carry == 0){
                    sb.append(0);
                    carry = 0;
                }   
                else{
                    sb.append(1);
                    carry = 0;
                }   
            }
            if((c1[p] == '0' && c2[q] == '1') || (c1[p] == '1' && c2[q] == '0')){
                if(carry == 0){
                    sb.append(1);
                    carry = 0;
                }   
                else{
                    sb.append(0);
                    carry = 1;
                }                   
            }
            if((c1[p] == '1' && c2[q] == '1')){
                if(carry == 0){
                    sb.append(0);
                    carry = 1;
                }   
                else{
                    sb.append(1);
                    carry = 1;
                }
            }
            p--;
            q--;
        }
    
        for(int j = size-len-1; j>=0; j--){
            if(max[j] == '0'){ 
                if(carry == 0){     
                    sb.append(0);
                    carry = 0;
                }   
                else{
                    sb.append(1);
                    carry = 0;
                }   
            }
            if(max[j] == '1'){
                if(carry == 0){     
                    sb.append(1);
                    carry = 0;
                }   
                else{
                    sb.append(0);
                    carry = 1;
                }   
            }           
        }
        if(carry == 1)
            sb.append(1);   
        return sb.reverse().toString();
    }
    

    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();
    }
    

    你可以自己写一本

    long a =100011111111L;
    long b =1000001111L;
    
    int carry = 0 ;
    long result = 0;
    
    long multiplicity = 1;
    
    while(a!=0 || b!=0 || carry ==1){
        if(a%10==1){
            if(b%10==1){
                result+= (carry*multiplicity);
                carry = 1;
            }else if(carry == 1){
                carry = 1;  
            }else{
                result += multiplicity;
            }
        }else if (b%10 == 1){
            if(carry == 1){
                carry = 1;
            }else {
                result += multiplicity; 
            }
        }else {
            result += (carry*multiplicity);
            carry = 0;
        }
    
        a/=10;
        b/=10;
        multiplicity *= 10;
    
    }
    
    
    System.out.print(result);
    
    它只需要数字,不需要字符串,不需要子字符串和

    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);
    
    
        }
    
    }
    

    这个想法与少数答案中讨论的想法相同,但这是一个更短、更容易理解的解决方案(步骤已注释)


    哇。它成功了!谢谢兄弟。但我想知道你能否解释一下原因?
    Integer
    是一个类,它包含一个方法,可以将表示整数的字符串解析为其实际整数值(
    int
    )。您可以查看我提供给您的链接。Martin-它不会以二进制形式显示答案。我们如何做?这会抛出java.lang.NumberFormatException:对于输入字符串:“1010000100100110011001000001011111110110110011101111111111101000001011110011100011111111001100011101101011011011011011011011011011011011011011011011011011011011011011011011011011010011011011011010011011011011011000011010101”“1101010010111101110001111110101010000111011101011010100000111011011011001011101111111100000011111011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011001001001000011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011011这可能会让你大吃一惊。你可以用java编写C代码。C是较低级别的,你可以用它做二进制算术。时间不早了,所以我不准备写一个示例,但你可以查一下。问题特别是说
    java
    。java 7中也允许使用二进制文字,请看这应该是正确的答案;没有理由转换为字符串或roll您自己的解决方案。@Serhanbaker您能解释一下吗,sum+=s1.charAt(first)-'0';bit.Thanks这应该是可以接受的答案,因为第一个答案的值不太大。代码欢迎解释一下。只有代码的答案可能会被标记为“低质量”“并删除,即使它们在技术上是有效的。我认为一点解释将有助于您在回答中添加详细信息
    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();
    }
    
    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); 
       } 
    }
    
    long a =100011111111L;
    long b =1000001111L;
    
    int carry = 0 ;
    long result = 0;
    
    long multiplicity = 1;
    
    while(a!=0 || b!=0 || carry ==1){
        if(a%10==1){
            if(b%10==1){
                result+= (carry*multiplicity);
                carry = 1;
            }else if(carry == 1){
                carry = 1;  
            }else{
                result += multiplicity;
            }
        }else if (b%10 == 1){
            if(carry == 1){
                carry = 1;
            }else {
                result += multiplicity; 
            }
        }else {
            result += (carry*multiplicity);
            carry = 0;
        }
    
        a/=10;
        b/=10;
        multiplicity *= 10;
    
    }
    
    
    System.out.print(result);
    
    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);
    
    
        }
    
    }
    
    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));
        }
    
    }
    
    
    // Handles numbers which are way bigger.
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1; 
        int j = b.length() -1;
        int carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (j >= 0) { sum += b.charAt(j--) - '0' };
            if (i >= 0) { sum += a.charAt(i--) - '0' };
    
            // Added number can be only 0 or 1
            sb.append(sum % 2);
    
            // Get the carry.
            carry = sum / 2;
        }
    
        if (carry != 0) { sb.append(carry); }
    
        // First reverse and then return.
        return sb.reverse().toString();
    }
    
    Try this, tested with binary and decimal and its self explanatory
    
    public String add(String s1, String s2, int radix){
            int s1Length = s1.length();
            int s2Length = s2.length();
            int reminder = 0;
            int carry = 0;
            StringBuilder result = new StringBuilder();
            int i = s1Length -1;
            int j = s2Length -1;
            while (i >=0 && j>=0) {
                int operand1 = Integer.valueOf(s1.charAt(i)+"");
                int operand2 = Integer.valueOf(s2.charAt(j)+"");
                reminder = (operand1+operand2+carry) % radix;
                carry = (operand1+operand2+carry) / radix;
                result.append(reminder);
                i--;j--;
            }
            while(i>=0){
                int operand1 = Integer.valueOf(s1.charAt(i)+"");
                reminder = (operand1+carry) % radix;
                carry = (operand1+carry) / radix;
                result.append(reminder);
                i--;
            }
            while(j>=0){
                int operand1 = Integer.valueOf(s2.charAt(j)+"");
                reminder = (operand1+carry) % radix;
                carry = (operand1+carry) / radix;
                result.append(reminder);
                j--;
            }
            return result.reverse().toString();
        }
    }
    
    public String addBinary(String a, String b) { 
        int carry = 0;
        StringBuilder sb = new StringBuilder();
        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0;i--,j--){
            int sum = carry + (i >= 0 ? a.charAt(i) - '0':0) + (j >= 0 ? b.charAt(j) - '0' : 0);
            sb.append(sum%2);
            carry =sum / 2;
        }
        if(carry > 0) sb.append(carry);
        sb.reverse();
        return sb.toString();
    }