快速'位'统计
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 ;
}
{
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 .