Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Algorithm_Binary_Decimal - Fatal编程技术网

在Java中添加二进制数

在Java中添加二进制数,java,arrays,algorithm,binary,decimal,Java,Arrays,Algorithm,Binary,Decimal,我有一个函数,它将两个二进制数作为一个整数数组,将这些数相加,然后将和作为一个新的整数数组返回 public static int[] addBin(int a[], int b[]){ int[] sum = {0, 0, 0, 0, 0, 0, 0, 0}; int carryover = 0; int randombanana = 0; int x = 7; for(x = 7; x > 0; x--){ r

我有一个函数,它将两个二进制数作为一个整数数组,将这些数相加,然后将和作为一个新的整数数组返回

public static int[] addBin(int a[], int b[]){
      int[] sum = {0, 0, 0, 0, 0, 0, 0, 0};
      int carryover = 0;
      int randombanana = 0;
      int x = 7;
      for(x = 7; x > 0; x--){
        randombanana = a[x] + a[x] + carryover;
        if(randombanana == 1){
          sum[x] = 1;
          carryover = 0;
        }
        else if(randombanana == 2){
          sum[x] = 0;
          carryover = 1;
        }
        else if(randombanana == 3){
          sum[x] = 1;
          carryover = 1;
        }
        else if(randombanana == 0){
          sum[x] = 0;
          carryover = 0;
        }
        else{
          System.out.println("Either I [censored] up, or you [censored] up.  I'm a genius so I'm going to assume you [censored] up");
        }
      }
          if(carryover == 1){
            sum[x] = 1;
      }
      return sum;
    }
该代码适用于单位数字,包括需要携带数字的数字,但在双位或三位数字上,当一个数字添加到自身时,该代码可以正常工作,但在添加不同的多位数字时,该代码不能正常工作。

randombanana = a[x] + b[x] + carryover;

您的for循环未处理第0位

for(x = 7; x >= 0; x--){

假设两个数字长度相同,则可以按如下方式添加数字:

public static int[] addNumbers(int[] firstNum, int[] secondNum) {
        int[] result = new int[firstNum.length + 1];
        int digitSum, carry = 0, i;
        for (i = firstNum.length - 1; i >= 0; i--) {
            digitSum = firstNum[i] + secondNum[i] + carry;
            result[i + 1] = digitSum % 2;
            carry = digitSum / 2;
        }
        result[0] = carry;
        return result;
    }

最后一位在for循环之外的单独if语句中处理。