欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三种方法写一个函数返回二进制中1的个数

程序员文章站 2022-07-15 09:57:23
...

1.写一个函数返回二进制中1的个数

方法一:n与n-1按位与
例如:15:0000 1111
15-1:0000 1110 &–>00001110
这样做n&n-1直到n==0时共做了多少次即为这个数中1的个数。
代码如下:

int count_one_bits(unsigned int n){   
	int count = 0;
	while (n){
		n &= n - 1;
		count++;
	}
	return count;

}

方法二:十进制转换为二进制采用了模二取余的方法,记录每次产生的余数,若是1,count++
代码如下:

int count_one_bits(unsigned int n){   
	int count = 0;                  
	int x = 0;                       
	while (n){
		x = n % 2;
		n >>= 1;
		if (x % 2 == 1){
			count++;
		}
	}
	return count;
}

方法三:
判断二进制中每一位的值是否为1可以做这样的运算:
(n & 1) == 1;若为1;则count++;
整数在内存中为32个比特位,则采用i循环32次,判断每一位的值是否为1即可;
代码如下:

int count_one_bits(unsigned int n){   //方法3
	int i = 0;
	int count = 0;
	for (i = 1; i != 0; i <<= 1){
		//判断每一位的值是否为1
		if ((n & 1) == 1){
			count++;
		}
		//右移准备判断下一位的值
		n >>= 1;
		return count;
	}
}
int main(){
	unsigned int a = 0;
	scanf("%u", &a);
	printf("二进制中1的个数为:%d\n", count_one_bits(a));
	return 0;
}