I am studying for an interview and I came across an interview that asks to count the number of bits in an int. I have the solution but I do not uderstand either solution. Woul somebody please explain it to me? Thanks

Code:

int bitcount(int v)
{
for(int count=0; v; count++, v &= ~(v-1));
return count;
}
int table[] = {0,1,1,2,1,2,2,3, 1,2,2,3,2,3,3,4 };
#define bc(x) table[(x)&0xf ] // maps nibbles to number of bits
int bitcount(int v)
{
// assume 16 bit int
return bc(x) + bc(x>>4) + bc(x>>8) + bc(x>>12);
}