num=num & (num-1)计算1的个数
num=num | (num+1)计算0的个数
//迭代方式
int getwei1(int num)
{
int wei = 0;
for ( ; num; num=num&(num-1) )
{
wei++;
}
return wei;
}
//goto方式
int getwei1A(int num)
{
int wei = 0;
AAAA:if (num)
{
wei++;
num = num&(num - 1);
goto AAAA;
}
return wei;
}
//递归方式
int getweidigui(int num)
{
if (num ==0)
{
return 0;
}
else
{
return 1 + getweidigui(num&(num - 1));
}
}
}
算法思路:
// num & num-1
// 100 1100100 3
// 99 1100011 -1 +1
// 1100000
// 1011111 -1 +1
// 1000000
// 0111111 -1 +1
// 00000000