package test;
import java.util.*;
public class BinaryAdd
{
private static boolean [] add(boolean [] a, boolean [] b)
{
// pad them to same length
int l = a.length > b.length ? a.length : b.length;
a = Arrays.copyOf(a, l);
b = Arrays.copyOf(b, l);
// prevent overflow, make the results bigger
boolean [] r = new boolean[a.length + 1];
boolean t = false;
for (int i = 0; i < l; i++)
{
if (a[i] && b[i])
{
if (t)
{
r[i] = true;
t = true;
}
else
{
r[i] = false;
t = true;
}
}
else if (a[i] || b[i])
{
if (t)
{
r[i] = false;
t = true;
}
else
{
r[i] = true;
t = false;
}
}
else
{
if (t)
{
r[i] = true;
t = false;
}
else
{
r[i] = false;
t = false;
}
}
}
// check overflow
if (t)
{
r[l] = true;
}
return r;
}
public static void main(String[] args)
{
// least significant position is at 0
boolean a1[] = {true};
boolean a2[] = {false};
boolean a3[] = {true, true};
boolean a4[] = {false, false};
boolean a5[] = {true, false};
boolean a6[] = {false, true};
boolean a7[] = {true, true, true, true};
boolean a8[] = {false, true, false, true};
// keep in mind least significant value is at index 0
System.out.println(Arrays.toString(a1) + " + " + Arrays.toString(a1) + " = " + Arrays.toString(add(a1, a1)));
System.out.println(Arrays.toString(a1) + " + " + Arrays.toString(a2) + " = " + Arrays.toString(add(a1, a2)));
System.out.println(Arrays.toString(a3) + " + " + Arrays.toString(a3) + " = " + Arrays.toString(add(a3, a3)));
System.out.println(Arrays.toString(a7) + " + " + Arrays.toString(a8) + " = " + Arrays.toString(add(a7, a8)));
}
}