/***************************************************************************
* Author: Isai Damier
* Title: Test Bit
* Project: geekviewpoint
* Package: algorithms
*
* Statement:
* Given a bit sequence, indicate whether the kth bit is set.
* The zeroth (0th) bit is the least significant
* (rightmost) bit.
*
* Sample Input: 0010010010, 4
* Sample Output: true
*
* Technical Details: Let x = 0010010010. Then only the 1st, 4th,
* and the 7th bits are set. Therefore, testBit(x,4) would return
* TRUE while testBit(x,2) would return FALSE.
*
* testBit is a three steps operation:
* step_1] Using the shift-left operator << create a bit
* sequence where only the kth bit is set.
* step_2] Take the bitwise AND of x and the sequence in step_1.
* This operation will force clear all the bits in x; except
* the kth bit. It leaves the kth bit unchanged.
* step_3] Compare the result of step_2 to zero (0). This step
* is effectively comparing the kth bit to zero.
*
**************************************************************************/
public boolean testBit(int x, int kth) {
return (x & 1 << kth) != 0;
}
import org.junit.Test;
import static org.junit.Assert.*;
public class BitwiseTest {
/**
* Test of testBit method, of class Bitwise.
*/
@Test
public void testTestBit() {
System.out.println(""testBit"");
String s = ""0010010010"";
int len = s.length() - 1;
int x = Integer.parseInt(s, 2);
Bitwise bits = new Bitwise();
for (int i = len; i >= 0; i--) {
if (s.charAt(i) == '1') {
assertTrue(bits.testBit(x, len - i));
} else {
assertFalse(bits.testBit(x, len - i));
}
}
}
}