C语言练习(函数):写一个函数返回参数(整数)二进制中的1的个数(3种方法)

简单解释一下,就是写一个函数,传个实参过去,整数,然后该函数返回这个整数的二进制的个数;今天发现了三种方法可以求解,所以写个博客记录一下,以后想起来了可以回过来看看;
1、第一种:我们一般传过去的都是十进制的整数,所以可以利用求二进制的方法来求1的个数;对2取余,余1的话就说明二进制中有个1,然后除以二,在取余,直到除2之后为0,代码如下:

int count_one_bits(int integer)
{
	int count = 0;//用来记录二进制中1的个数
	while (integer > 0)
	{
		if (integer%2==1)
		{
			count++;
			integer /= 2;
		}
		else
		{
			integer /= 2;
		}
	}
	return count;
}

2、第二种:利用位操作符来解决;这里有个小技巧,如果你想要获得整数n的二进制i位的值(1或0),可以右移(i-1)位,然后或1(&1),就可以求出i位的值了,就是这样n>>(i-1)&1,就可以求出第i位的值,如果是1的话加1,不然就不加,代码如下:

int count_one_bits(unsigned int integer)
{
	int i = 0;
	int count = 0;
	for ( i = 0; i < 32; i++)
	{
		if (((integer >> i) & 1) == 1)
		{
			count++;
		}
	}
	return count;
}

自己用画图板做的简单注释:
在这里插入图片描述
3、第三种:这种方法也是用位操作符解决的;只用一个与运算符&就能解决;n&(n-1),每与一次,n的二进制位中1的个数就少一个,直到二进制位全为0,循环结束

int count_one_bits(unsigned int integer)
{
	int count = 0;
	while (integer)
	{
		integer = integer&(integer - 1);//每与一次,他的二进制位少个1,将它的二进制位最低低位的1变成0;
		count++;//计数器;
	}
	return count;
}

下图是我做的注释
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/baidu_39334407/article/details/84503904