Subtraction
by Isai Damier

/***************************************************************************
 * Author: Isai Damier
 * Title: Subtraction
 * Project: geekviewpoint
 * Package: algorithms
 *
 * Statement:
 *   Given two sets of bits, x and y, find their difference.
 *
 * Sample Input:  0010010010
 * Sample Output: 0010010011
 *
 * Technical Details: The subtraction of two sets is the subset comprising
 *   the elements that appear in the minuend x and not in the subtrahend y.
 *   For example if s1 = [a,b,f,h,k] and s2 = [b,c,d,f,h,i] then the
 *   subtraction of s1 and s2 is [a,k]. For two sets of bits the subtraction
 *   is a two steps process. First, the negative of the second set is
 *   calculated. Then the bitwise AND of the result and the first set is
 *   taken. For example if x = 0110101 and y=0101100 then the subtraction of
 *   x and y follows:
 *    step_1: z = negative y = ~y = 1010011.
 *    step_2: x AND z = x & z = x & (~y) = 0010001
 *
 **************************************************************************/ 
 public int subtraction(int x, int y) {
  return x & ~y;
}
import org.junit.Test;
import static org.junit.Assert.*;

public class BitwiseTest {

 /**
   * Test of subtraction method, of class Bitwise.
   */
  @Test
  public void testSubtraction() {
    System.out.println(""subtraction"");
    Bitwise bits = new Bitwise();
    int x = Integer.parseInt(""0101100"", 2);
    int y = Integer.parseInt(""0110101"", 2);
    int u = Integer.parseInt(""0001000"", 2);
    assertEquals(u, bits.subtraction(x, y));

    x = Integer.parseInt(""0101100"", 2);
    y = Integer.parseInt(""0110101"", 2);
    u = Integer.parseInt(""0010001"", 2);
    assertEquals(u, bits.subtraction(y, x));
  }
}