添加二进制数

有谁知道如何在Java中添加2个二进制数,以二进制forms输入?

例如, 1010 + 10 = 1100

使用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; } 

深入了解基本面:

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

Martijn绝对正确,捎带并完成答案

 Integer.toBinaryString(sum); 

会根据OP问题给出二进制输出。

您可以将0b放在二进制数前面以指定它是二进制数。

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

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

这将以二进制forms添加两个,并将Integer.toString()与2添加为第二个参数将其转换回二进制。

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

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

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

我试图让它变得简单,这是我必须处理我的密码学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-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; } 

这是一个python版本

 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 
 class Sum{ public int number; public int carry; Sum(int number, int carry){ this.number = number; this.carry = carry; } } public String addBinary(String a, String b) { int lengthOfA = a.length(); int lengthOfB = b.length(); if(lengthOfA > lengthOfB){ for(int i=0; i<(lengthOfA - lengthOfB); i++){ b="0"+b; } } else{ for(int i=0; i<(lengthOfB - lengthOfA); i++){ a="0"+a; } } String result = ""; Sum s = new Sum(0,0); for(int i=a.length()-1; i>=0; i--){ s = addNumber(Character.getNumericValue(a.charAt(i)), Character.getNumericValue(b.charAt(i)), s.carry); result = result + Integer.toString(s.number); } if(s.carry == 1) { result += s.carry ;} return new StringBuilder(result).reverse().toString(); } Sum addNumber(int number1, int number2, int carry){ Sum sum = new Sum(0,0); sum.number = number1 ^ number2 ^ carry; sum.carry = (number1 & number2) | (number2 & carry) | (number1 & carry); return sum; } 
 import java.util.*; public class BitAddition { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int len = sc.nextInt(); int[] arr1 = new int[len]; int[] arr2 = new int[len]; int[] sum = new int[len+1]; Arrays.fill(sum, 0); for(int i=0;i=0;i--){ if(sum[i+1] == 0){ if(arr1[i]!=arr2[i]){ sum[i+1] = 1; } else if(arr1[i] ==1 && arr2[i] == 1){ sum[i+1] =0 ; sum[i] = 1; } } else{ if((arr1[i]!=arr2[i])){ sum[i+1] = 0; sum[i] = 1; } else if(arr1[i] == 1){ sum[i+1] = 1; sum[i] = 1; } } } for(int i=0;i<=len;i++){ System.out.print(sum[i]); } } } 

其中一个简单的方法是:

  1. 将两个字符串转换为char []数组并设置carry = 0。
  2. 在for循环中设置最小的数组长度
  3. 从最后一个索引开始循环并减少它
  4. 检查4个条件(0 + 0 = 0,0 + 1 = 1,1 + 0 = 1,1 + 1 = 10(进位= 1)),对两个arrays中的每个元素进行二进制加法,并相应地重置进位。
  5. 在stringbuffer中附加添加内容
  6. 将max size数组中的其余元素追加到stringbuffer,但请在追加时检查carry
  7. 以相反的顺序打印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(); } 
 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); 

它只是通过数字,不需要字符串,不需要SubString和…

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