第一种:
#include<stdio.h>
int Number(unsigned int num)
{
int tmp,count=0;
while (num!=0 )
{
tmp = num % 2;
num = num / 2;
if (tmp == 1)
count++;
}
return count;
}
int main()
{
int num = -1;
int n=Number(num);
printf("%d\n", n);
system("pause");
return 0;
}
第二种:将num和1进行按位与运算,可以得出最低位,结果为1,最低位为1;结果为0,最低位为0。然后循环将num右移一位进行运算。
#include<stdio.h>
int Number(unsigned int num)
{
int tmp,count=0;
while (num != 0)
{
tmp=num & 1;
if (tmp == 1)
count++;
num=num >> 1;
}
return count;
}
int main()
{
int num = -1;
int n = Number(num);
printf("%d\n", n);
return 0;
}
第三种:num = num & num-1:让num和num-1进行按位与运算,将二进制中出现的1从低位到高位依次变成0,num=0循环终止,循环的次数就为1的个数
#include<stdio.h>
int Number(unsigned int num)
{
int tmp, count = 0;
while (num != 0)
{
num = num & num-1;
count++;
}
return count;
}
int main()
{
int num = 15;
int n = Number(2019);
printf("%d\n", n);
system("pause");
return 0;
}