两种解法:
第一种:
为了避免死循环, 可以让num和1按位与,判断最低位是不是1,然后让1左移再与num按位与 判断次低位是不是1,然后按照这种模式一直循环 ,直到1左移32次截止;这种方法不会死循环,可以正确判断出正数和负数中1的个数,但是不论数字大小均要循环操作32次,效率不高。
代码:
//int NumberOf1(int num)
//{
// int FLAG = 1;
// int count = 0;
//
// while(FLAG)
// {
// if(num & FLAG)
// count++;
// FLAG <<= 1;
// }
// return count;
//}
第二种:方便高效
int NumberOf1(int num)
{
int count = 0;
while(num)
{
num = num & (num - 1);
count++;
}
return count;
}
int main()
{
cout << NumberOf1(-10) << endl;
return 0;
}