# Clear Lowest Bitby Isai Damier, Android Engineer @ Google

```/***************************************************************************
* Author: Isai Damier
* Title: Clear Lowest Bit
* Project: geekviewpoint
* Package: algorithms
*
* Statement:
*   Clear the least significant (set) bit in the given sequence of bits.
*
* Sample Input: integer representation of bit sequence 1111111110
* Sample Output: 1111111100 after clearing the lowest set bit
*
* Technical Details: When counting in binary, the difference
*    between two consecutive numbers (i.e. n and n-1) is twofold:
*     1] The least significant set bit in the greater number
*       is not set in the lesser number.
*     2] All bits to the left of said least significant set bit
*        are the same for both numbers.
*    (7) 0000_0111,  (6) 0000_0110,  (5) 0000_0101,  (4) 0000_0100,
*    (6) 0000_0110,  (5) 0000_0101,  (4) 0000_0100,  (3) 0000_0011.
*
*     Hence, taking the bitwise AND of n and n-1 is sufficient for
*     clearing the least significant bit.
*
**************************************************************************/
public int clearLowestBit(int n) {
return n & (n - 1);
}```
```import org.junit.Test;
import static org.junit.Assert.*;

public class BitwiseTest {

/**
* Test of clearLowestBit method, of class Bitwise.
*/
@Test
public void testClearLowestBit() {
Bitwise bits = new Bitwise();
System.out.println(""clearLowestBit"");
String[] set = {""1111111111"", ""1111111110"", ""1111111100"",
""1111111000"", ""1111110000"", ""1111100000"", ""1111000000"",
""1110000000"", ""1100000000"", ""1000000000"", ""000000000"",
""000000000""};
int x, y;
for (int i = 1; i < set.length; i++) {
x = Integer.parseInt(set[i - 1], 2);
y = Integer.parseInt(set[i], 2);
assertEquals(y, bits.clearLowestBit(x));
}
}
}```