方法1:通过将n的每一位与1做&,若结果为1则说明该位为1,否则为0。若n的二进制长度为k,则需要k次
static int sizeofone1(int n)
{
int cnt=0;
while(n>0)
{
if ((n&1)==1)
{
cnt++;
}
n>>=1;
}
return cnt;
}
方法二:将n与n-1做&,这样可以将n的二进制形式的最后一个1变为0,需要循环k次(k为n的二进制形式中1的个数)
static int sizeofone2(int n)
{
int cnt=0;
while(n>0)
{
cnt++;
n&=n-1;//把n的最后一个1变成0,例如(101100)&(101011)=101000
}
return cnt;
}