Here's a fast way to count the number of bits in an integer. It uses a 4 bit wide lookup table and interates through each nibble to add the number of bits set in it to the total number of bits set.

This code is a tradeoff between the two extreams: count each bit individually, or have a 2<pow>32</pow> large lookup table.

### Code:

int bitcount(unsigned int num) {
int count = 0;
static int nibblebits[] =
{0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
for(; num != 0; num >>= 4)
count += nibblebits[num & 0x0f];
return count;
}

## Extensions:

A possibly faster, yet less portable function is one built into GCC:

int __builtin_popcount (unsigned int x);

This function tries to use CPU specific instructions, which will always be orders of magnitude faster than any algorithm you manage to come up with.

## Sources:

http://c-faq.com/misc/bitcount.html

http://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer

## Comments (0)

You don't have permission to comment on this page.