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 - ((Number.URShift(x, 1)) & 0x5555555555555555L);
x = (x & 0x3333333333333333L) + ((Number.URShift(x, 2)) & 0x3333333333333333L);
x = (x + (Number.URShift(x, 4))) & 0x0F0F0F0F0F0F0F0FL;
x = x + (Number.URShift(x, 8));
x = x + (Number.URShift(x, 16));
x = x + (Number.URShift(x, 32));
return ((int) x) & 0x7F;
}