public static int pop ( long x ) { /* Hacker's Delight 32 bit pop function: * http://www.hackersdelight.org/HDcode/newCode/pop_arrayHS.cc * int pop(unsigned x) { x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; x = x + (x >> 8); x = x + (x >> 16); return x & 0x0000003F; } ***/ // 64 bit java version of the C function from above x = x - ( ( x >>> 1 ) & 0x5555555555555555 L ) ; x = ( x & 0x3333333333333333 L ) + ( ( x >>> 2 ) & 0x3333333333333333 L ) ; x = ( x + ( x >>> 4 ) ) & 0x0F0F0F0F0F0F0F0F L ; x = x + ( x >>> 8 ) ; x = x + ( x >>> 16 ) ; x = x + ( x >>> 32 ) ; return ( ( int ) x ) & 0x7F ; }
Returns the number of bits set in the long