总结:写一个函数返回参数二进制中 1 的个数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
方法一:此方法效率低
int count_one_bits(unsigned int value)
{
	int count = 0;
	int tamp;
	int i;
	tamp = value;
	for(i=0;i<32;i++)
    {
        if((value>>i) & 1 == 1)
          count++;
    }
		return count;// 返回 1的位数 
}
int main()
{
	int value = 0;
	int count = 0;
	printf("请输入数值:\n");
	scanf("%d",&value);
	count = count_one_bits(value);
	printf("%d的二进制数中1的个数为->%d\n",value,count);
	system("pause");
	return 0;
}
方法二:(注意:要用此方法,函数的形参类型
必须是unsigned int,不然只能算正数)
int count_one_bits(unsigned int value)
{
	int count = 0;
	int tamp;
	tamp = value;
	while (value)
	{
		if (value % 2 == 1)
		{
			count++;
		}
		value = value / 2;
	}
	
	return count;// 返回 1的位数 
}
int main()
{
	int value = 0;
	int count = 0;
	printf("请输入数值:\n");
	scanf("%d",&value);
	count = count_one_bits(value);
	printf("%d的二进制数中1的个数为->%d\n",value,count);
	system("pause");
	return 0;
}
方法三:
比如num=15
00000000000000000000000000001111  num
00000000000000000000000000001110  num-1
  num & num-1 =
00000000000000000000000000001110  num
00000000000000000000000000001101  num-1
  num & num-1 =
00000000000000000000000000001100  num
00000000000000000000000000001011  num-1
   num & num-1 =
00000000000000000000000000001000  num
00000000000000000000000000000111  num-1
   num & num-1 =
00000000000000000000000000000000  
总共与了4次后,num & num-1 等于0,最初的num有4个1
int count_one_bits(int value)
{
	int count = 0;
	while (value)
	{
		value =value & (value - 1);
		count++;
	}
	return count;
}
int main()
{
	int value = 0;
	int count = 0;
	printf("请输入数值:\n");
	scanf("%d",&value);
	count = count_one_bits(value);
	printf("%d的二进制数中1的个数为->%d\n",value,count);
	system("pause");
	return 0;
}


猜你喜欢

转载自blog.csdn.net/jsbgo201506010102/article/details/79776417