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

练习11-二进制表示时 1出现的次数

程序员文章站 2024-03-16 16:01:22
...

1.问题:

随意输入一个整数,求这个整数用二进制表示时1出现的次数。

2.代码:

 1)用 按位与&1

 

#include<stdio.h>
size_t Num_bit_one(int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (1 == ((n>>i) & 1))
		{
			count++;
		}
	}
	return count;
}
int main()
{
	int n = 0;
	printf("请任意输入一个整数:");
	scanf("%d", &n);
	int ret= Num_bit_one(n);
	printf("二进制时1的个数为:%d",ret);
	return 0;
}

 2)用%2  /2法-注意负数-应该使用 unsigned int 类型 (不是绝对值!)

 

#include<stdio.h>
size_t Num_bit_one(unsigned int n)//负数等价转换为正数-去绝对值不行!
//	  //eg.-1 1(取绝对值)  32个1(无符号)
{
	int count = 0;
	while (n)
	{
		if (n % 2 == 1)
		{
			count++;
		}
		n /= 2;
	}
	return count;
}
int main()
{
	unsigned int n = 0;
	printf("请任意输入一个整数:");
	scanf("%u", &n);
	unsigned int ret = Num_bit_one(n);
	printf("二进制时1的个数为:%u", ret);
	return 0;
}

 3)用 n=n&(n-1)  --大致写出几个二进制表示即可得到规律

  

// n=n&n(n-1) -由写出的几个数找出规律!
#include<stdio.h>
size_t Num_bit_one(int n)
{
	int count = 0;
	while (n)//n不为0!!-已经必定含有1-必要!
	{
		n = n & (n - 1);//1的个数等于可执行n & (n - 1)次数 直至为0结束
		count++;
	}
	return count;
}
int main()
{
	int n = 0;
	printf("请任意输入一个整数:");
	scanf("%d", &n);
	int ret = Num_bit_one(n);
	printf("二进制时1的个数为:%d", ret);
	return 0;
}

3.运行结果:

 练习11-二进制表示时 1出现的次数

PS.主要注意第三种写法!

K- 

 

相关标签: 练习Go!