解法1:右移 & 1
int numberof1(int i)
{
int count = 0;
while (n) {
if (n & 1) {
count++;
}
n = n >> 1;
}
rerutn count;
}
缺陷是:
当该数为负数,例如0x8000000,右移不是得到0x40000000,而是0xc0000000,因为该数本身是一个负数,所以右移之后仍要保持是负数的本质。
解法2:数不右移,而是用1左移与该数进行相 &
int numberof2(int n)
{
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (n & flag)
count ++;
flag = flag << 1;
}
return count;
}