栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

c语言一个数的二进制有几个1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言一个数的二进制有几个1

实现一个函数的二进制有几个1
1.方法一:利用除法和取余,如下图所示:

int NumOf1(int x) {
	int count = 0;
	while (x) {
		
		if (x % 2 == 1) {
			count++;
		}
		x /= 2;
	}
	return count;
	}
int main() {
	int num = 11;
	int n = NumOf1(num);
	printf("%d的二进制中有几个1:%dn", num, n);
	return 0;
	}

结果:

当对负数进行计算时出错,因为负数不能进行%运算。

2.方法二:数按位右移与1相与

int NumOf1(int x) {
	int count = 0;
	for (int i = 0; i < 32;i++) {
		if ( (x>>i)&1 == 1) {
			count++;
		}
	}
	return count;
	}
int main() {
	int num = -1;
	int n = NumOf1(num);
	printf("%d的二进制中有几个1:%dn", num, n);
	return 0;
	}


该方法负数时同样可用,但是该方法需要移动32次位置,但实际有些数并不需要移动那么多次,比如5移动3次就可以。

3.方法三:

int NumOf1(int x) {
	int x = 0;
	int count = 0;
	while (x) {
		x = x & (x - 1);
		count++;
	}
	return count;
	}
int main() {
	int num = -1;
	int n = NumOf1(num);
	printf("%d的二进制中有几个1:%dn", num, n);
	return 0;
	}


该方法同样适用于负数,但是该方法减少移动次数,优化代码。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号