简体   繁体   English

Java中的二进制加法

[英]Binary addition in java

I wrote a program for a binary addition in java. 我用Java编写了一个二进制加法程序。 But the result is sometimes not right. 但是结果有时是不正确的。
For example if i add 1110+111. 例如,如果我添加1110 + 111。 The result should be 10101. 结果应为10101。
But my program throws out 10001. 但是我的程序抛出了10001。
Maybe one of you find the mistake. 也许你们之一发现了错误。

 import java.util.Scanner;

 public class BinaryAdder { 
 public static String add(String binary1, String binary2) {
    int a = binary1.length()-1;
    int b = binary2.length()-1;
    int sum = 0;
    int carry = 0;


    StringBuffer sb = new StringBuffer();
    while (a >= 0 || b >= 0) {
        int help1 = 0; 
        int help2 = 0;
        if( a >=0){
        help1 = binary1.charAt(a) == '0' ? 0 : 1;
        a--;
    }  if( b >=0){
        help2 = binary2.charAt(b) == '0' ? 0 : 1;
        b--;
    }
         sum = help1 +help2 +carry;
         if(sum >=2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

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

    sb.reverse();
    String s = sb.toString();
    s = s.replaceFirst("^0*", "");

    return s;
}


public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.print("First:  ");
    String input1 = scan.next("(0|1)*");
    System.out.print("Second:  ");
    String input2 = scan.next("(0|1)*");
    scan.close();
    System.out.println("Result: " + add(input1, input2));
}

} }

this function is much simpler : 这个函数要简单得多:

public static String binaryAdd(String binary1,String binary2){
    return Long.toBinaryString(Long.parseLong(binary1,2)+Long.parseLong(binary2,2));
}

you can change Long.parseLong into Integer.parseInt if you don't expect very large numbers, you can also replace parse(Long/Int) with parseUnsigned(Long/Int) since you don't expect your strings to have a minus sign do you ? 您可以将Long.parseLong更改为Integer.parseInt如果您不希望有很大的数字),也可以将parse(Long/Int)替换为parseUnsigned(Long/Int)因为您不希望字符串中带有减号你呢 ?

You are not considering the case when 您不考虑以下情况

help1 + help2 = 3

So your method String add(String binary1, String binary2) should be like this: 因此,您的方法String add(String binary1, String binary2)应该像这样:

public static String add(String binary1, String binary2) {
    int a = binary1.length()-1;
    int b = binary2.length()-1;
    int sum = 0;
    int carry = 0;


    StringBuffer sb = new StringBuffer();
    while (a >= 0 || b >= 0) {
        int help1 = 0; 
        int help2 = 0;
        if( a >=0){
        help1 = binary1.charAt(a) == '0' ? 0 : 1;
        a--;
    }  if( b >=0){
        help2 = binary2.charAt(b) == '0' ? 0 : 1;
        b--;
    }
         sum = help1 +help2 +carry;
         if (sum == 3){
            sb.append("1");
            carry = 1;
         }
         else if(sum ==2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

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

    sb.reverse();
    String s = sb.toString();
    s = s.replaceFirst("^0*", "");

    return s;
}

I hope this could help you! 希望对您有所帮助!

 sum = help1 +help2 +carry;
         if(sum >=2){
             sb.append("0");
             carry = 1;
         } else { 
             sb.append(String.valueOf(sum));
             carry = 0;
         }

If sum is 2 then append "0" and carry = 1 如果总和为2,则附加“ 0”并进位= 1

What about when the sum is 3, append "1" and carry = 1 如果总和为3,追加“ 1”并进位= 1

Will never be 4 or greater 永远不会是4或更大

Know I'm a bit late but I've just done a similar task so to anyone in my position, here's how I tackled it... 知道我来晚了一点,但我刚刚完成了类似的任务,所以对于我所在位置的任何人,这就是我的解决方法...

import java.util.Scanner;

public class Binary_Aids {
public static void main(String args[]) {
    System.out.println("Enter the value you want to be converted");
    Scanner inp = new Scanner(System.in);
    int num = inp.nextInt();

    String result = "";

    while(num > 0) {
        result = result + Math.floorMod(num,  2);
        num = Math.round(num/2);

    }

    String flippedresult = "";
    for(int i = 0; i < result.length(); i++) {
        flippedresult = result.charAt(i) + flippedresult;
    }

    System.out.println(flippedresult);


}
}

This took an input and converted to binary. 这花费了一个输入并转换为二进制。 Once here, I used this program to add the numbers then convert back... 到达这里后,我使用此程序将数字相加然后转换回...

import java.util.Scanner;

public class Binary_Aids {
public static void main(String args[]) {
    Scanner inp = new Scanner(System.in);

    String decimalToBinaryString = new String();

    System.out.println("First decimal number to be added");
    int num1 = inp.nextInt();
    String binary1 = decimalToBinaryString(num1);




    System.out.println("Input decimal number 2");
    int num2 = inp.nextInt();
    String binary2 = decimalToBinaryString(num2);

    int patternlength = Math.max[binary1.length[], binary2.length[]];

    while(binary1.length() < patternlength) {
        binary1 = "0" + binary2;
    }

    System.out.println(binary1);
    System.out.println(binary2);

    int carry = 0;
    int frequency_of_one;
    String result = "";
    for(int i = patternlength -i; i >= 0; i--) {
        frequency_of_one = carry;
        if(binary1.charAt(i) == '1') {
            frequency_of_one++;
        }
        if(binary2.charAt(i) == '1') {
            frequency_of_one++;

        }

        switch(frequency_of_one) {
        case 0 ;
        carry = 0;
        result = "1" + result;
        break;

        case 1 ;
        carry = 0;
        result = "1" + result;
        break;

        case 2;
        carry = 1;
        result = "0" + result;
        breake;

        case 3;
        carry = 1;
        result = "1" + result;
        breake;
        }
    }

    if(carry == 1) {
        result = "1" + result;

    }
    System.out.println(result);

  }



public static String decimalToBinaryString(int decimal1) {
String result = "";

while(decimal1 > 0) {
    result = result + Math.floorMod(decimal1,  2);
    decimal = Math.round(decimal1/2);
}

String flipresult = "";
for(int i = 0; i < result.length[]; i++) {
    flipresult = result.charAt(i) + flippedresult;
}
return flippedresult;   
}






}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM