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

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.运行结果:

 

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

K- 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值