00001 // Count the number of bits set in a word; return that number. 00002 // Use a small lookup table. Size of lookup table is tradeoff between 00003 // # of iterations needed and cache space used. 00004 00005 inline int countbits(unsigned word) { 00006 const int nbit[16] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; 00007 int nset=0; 00008 for (unsigned i=0;i<2*sizeof(unsigned);i++) { // assume char = 8 bits, i.e. two 00009 nset+=nbit[word&0xf]; // iterations per 'char' size object 00010 word>>=4; 00011 } 00012 return nset; 00013 }