int main()
{
int num = 13;
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((num >> i) & 1 == 1)
count++;
}
printf("count=%d\n", count);
}
方法三:跟方法二思想一样,就是代码循环有些差别。
int main()
{
int num = 13;
int count = 0;
while(num!=0)
{
if ((num & 1) == 1)
count++;
num = num >> 1;//按位与再右移一位
}
printf("count=%d\n", count);
}
方法四:num=num&(num-1),每执行一次就可以去掉num二进制序列中最右边的1.
优点:有几个1循环几次,效率高,平均时间复杂度高。
#include<stdio.h>
#include<Windows.h>
int main()
{
int num = 13;
int count = 0;
while (num)
{
num = num&(num - 1);//去掉num二进制中最右边的1
//1101 num
//1100
//1100 num
count++;
}//有几个1循环几次,时间效率高
printf("count=%d\n", count);
system("pause");
return 0;
}