在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语句中处理。