问计算整数中置位(值为 1)的位数的最有效方法是什么?
答像这个问题这样的许多“位操作”问题,都可以通过查找表来加速和简化(但请参见问题 20.13)。下面是一个小函数,可以一次性计算一个值的 4 位中的置位数。
static int bitcounts[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; int bitcount(unsigned int u) { int n = 0; for(; u != 0; u >>= 4) n += bitcounts[u & 0x0f]; return n; }