在c语言中有三种求解一个数1的个数的方法

将整数每次右移一位的方式

int Numble(int n)

{

int count = 0;

while (n)

{

if (n & 1 == 1)

count++;

n = n >> 1;

}

return count;

}

但这种方法存在的不足是,当这个整数是负数的时候,将无限循环

使整数与1进行与运算,1每次左移一位


int Numble(int n)

{

int count = 0;

int flag = 1;

while (flag&n)

{

count++;

flag = flag << 1;

}

return count;

}

整数减1在与这个整数相与


int Numble(int n)

{

int count = 0;

while (n)

{

count++;

n = n&(n - 1);

}

return count;

}