Java 1.5 defines new bit-manipulation methods on Integer and Long. These are one of the minor changes attributable to Josh Bloch. Here's some code to play around with them.
static void bitTricks(int x) {
// Approximate log2() with numberOfLeadingZeros()
if (x > 0)
System.out.printf("base-2 log of %d is between %d and %d%n", x,
Integer.SIZE-1-Integer.numberOfLeadingZeros(x),
Integer.SIZE-Integer.numberOfLeadingZeros(x-1));
// If 1 bits in an int are used to represent members of a set, then
// bitCount() and highestOneBit() allow efficient counting and
// iteration of the members of the set
System.out.printf("%d has %d bits set.%n", x, Integer.bitCount(x));
System.out.print(x + " = ");
while(x != 0) {
int highbit = Integer.highestOneBit(x); // Get the highest bit
System.out.print(highbit + "+"); // Print it out
x &= ~highbit; // Clear it
}
System.out.println("0");
}



