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

输入数字二进制中,求出二进制中1的个数

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

输入数字二进制中,求出二进制中1的个数

提示:仅供参考,如有错误,还望指出。

目录

文章目录

前言

一、解决方案

1.初始

1.1刚开始想到的

1.2修改后

1.3另外的方法

2.进阶

 二、新引出的问题

总结


前言

在笔试和面试时,我们不免会遇到一个这样的问题。

请输入一个整数,求出它的二进制中1的个数。

以下就是对于这个问题的一些解决办法。

一、解决方案

1.初始

1.1刚开始想到的

该方法是通过计算一个数的十位,百位获得灵感而得来的。

可输入负数时,与预想的不同。故还是需要修改。

int count_bit_one(int a)
{
	int count = 0;
	while (a)
	{
		if (a % 2 != 0)
		{
			count++;
		}
		a = a / 2;
	}
	return count;
}

1.2修改后

修改后也就是在函数上加上了一个unsigned。

也就是意味着将输入的值由有符号数转化为无符号数。进而可以算出1的个数。

int count_bit_one(unsigned int a)
{
	int count = 0;
	while (a)
	{
		if (a % 2 != 0)
		{
			count++;
		}
		a = a / 2;
	}
	return count;
}

1.3另外的方法

若想不出上述的方法,还可以用另外一种。

主要的思想是:将a的二进制序列一个一个与1比较

int count_bit_one(int a) 
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (((a >> i)& 1) == 1)
		{
			count++;
		}
	}
	return count;
}

2.进阶

 在通过大量计算,得出的这种算法效率最高。

例如:算出12的二进制序列中1的个数

代码:

int count_bit_one(int a)
{
	int count = 0;
	while (a)
	{
		a = a & (a - 1);
		count++;
	}
	return count;
}

 二、新引出的问题

 求出两个数的二进制序列中不同的个数

这时我们先求出两数二进制序列的不同,即可以通过疑异或得到。

而异或是代表这二者相异为1,这时就可以用上求出二进制序列中1的个数来求得二者相异的个数。

代码:        

int count_two_bit_same(int a, int b)
{
	int count = 0;
	int c = a ^ b;
	while (c)
	{
		c = c & (c - 1);
		count++;
	}
	return count;
}

总结

这里对文章进行总结:一个二进制的求解都有多种,当然还是建议用最优解。也体现出算法的重要性。最后,我们应该也要举一反三。

如果还是有些许的不理解就看鹏哥的视频吧。

链接如下:22.作业讲解(2)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程 C语言编程项目 C语_哔哩哔哩_bilibili

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

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

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