快速'位'统计

size_t Count(int x)
{
size_t uiCount
=0 ;
while (0 != x)
{
    ++uiCount ;
    x &= x-1;       // x &= x-1 ; deletes the rightmost 1-bit in x
}
return uiCount ;
}

每次 x - 1 都会导致 x 的二进制表示里最右侧的 1 与 x 原来的二进制表示 相反.

x       =        10010110

x - 1  =        10010101

x &= x-1 ->  10010100   // 至此, 最右侧的 1-bit 被delete掉了. 如此循环往复, 统计所有 1-bit .

posted @ 2011-03-23 20:32  walfud  阅读(122)  评论(0编辑  收藏  举报