整数转换为2进制数后,求该2进制数中1的个数
在看nasm汇编,有一段代码看不懂,在书的63页。
int count bits (unsigned int x )
{
static unsigned int mask[] = { 0x55555555,
0x33333333,
0x0F0F0F0F,
0x00FF00FF,
0x0000FFFF };
int i ;
int shift ; / number of positions to shift to right /
for ( i=0, shift =1; i < 5; i++, shift = 2 )
x = (x & mask[i ]) + ( ( x >> shift) & mask[i ] );
return x;
}
代码的目的是将整数转换为2进制数后,求该2进制数中1的个数。
请教高手,这怎么就得到正确结果了呢?原理是什么?