二进制中1的个数

来源:互联网 发布:查微信聊天记录的软件 编辑:程序博客网 时间:2024/06/14 09:57

两种解法:

第一种:常规解法

使用flag = 1这个数每次与原来的整数做与运算,然后向左移动的方式计算1的个数

例如:

#include <stdio.h>


int Numbercount(int n)
{
int count = 0;
unsigned int flag = 1;
while(flag)
{
if(n & flag)
count++;


flag = flag << 1;
}


return count;
}


int main(void)
{

int num = Numbercount(4);


printf("%d\n", num);


return 0;
}

第二种:创新性解法

把一个整数减去1,再与原来的整数做与运算,会把这个整数最右边的一个1变为0

例如:

#include <stdio.h>


int Numbercount(int n)
{
int count = 0;


while(n)
{
count++;
n = (n-1) & n;
}

return count;
}


int main(void)
{
int num = Numbercount(5);


printf("%d\n", num);


return 0;
}

原创粉丝点击