`
runfeel
  • 浏览: 935599 次
文章分类
社区版块
存档分类
最新评论

计算数字二进制表示中的1个数(五种解法)------------------编程之美

 
阅读更多

对于一个数字,无符号,求其二进制表示中的1个数,要求算法执行效率尽可能高。

解法一:考虑利用整数除法的特点,通过相除和求余来分析。

void fun1(int num)
{
	int ct=0;
	while (num)
	{
		if (num%2==1)
		{
			ct++;
		}
		num/=2;
	}
	cout<<ct<<endl;
}

解法二、使用位操作 假设该数是一个无符号整型八位字节表示的数字,通过该数与0x01相与,得出最后一位数字是0或者是1,若是零,与后结果为0,若是1,与后结果为1.

	int ct=0;
	while (num)
	{
		ct+=num&0x01;
		num>>=1;
	}
	cout<<ct<<endl;

解法三、任意一个数字x,当他与x-1相与之后,x的结果相比原来就少了一个1,一直循环下去,直到结果为0为止

int ct=0;
	while (num)
	{
		ct++;
		num&=(num-1);
	}
	cout<<ct<<endl;

解法四、只有八位二进制数字的话,直接把0-255内的所有情况都罗列出来,使用case语句。

int num;
switch(num)
{
case 0x0:
	num=0;
	break;
case 0x1:
case 0x2:
.........
case 0x80:
	num=1;
	break;
	.....
	.....
}
cout<<num<<endl

解法五、查表法

预定义的结果表:

	int result[256]={
		0,1,1,2,1,.........................
	};
	return result[num];
附加:

给定两个正整数,求其二进制表示中不同位有多少?

int fun(int a,int b)
{
	int num=0;
	while (a||b)
	{
		
		if (a%2!=b%2)
		{
			num++;
		}
		a/=2;
		b/=2;
	}
	return num;
}


分享到:
评论

相关推荐

    求二进制数中1的个数.pdf

    3. **消除1**:在循环体内,通过`v&=(v-1)`这一操作消除数字中的最右边的一个1。 4. **增加计数器**:每次消除一个1后,增加`num`的值。 5. **返回结果**:当给定的数字变为0时,退出循环并返回`num`作为结果。 ...

    python-leetcode面试题解之二进制求和.zip

    在LeetCode上,与二进制相关的题目可能包括但不限于:二进制数的最大子数组和、二进制转换中的反转数字、二进制搜索树的最近公共祖先等。通过解决这些问题,你可以深入理解二进制运算、位操作以及如何在实际问题中...

    华为OD机试C卷- 找数字(Java & JS & Python & C).md-私信看全套OD代码及解析

    要解决这个问题,关键在于理解如何在不改变二进制表示中`1`的数量的情况下,使一个二进制数递增。我们可以按照以下步骤来实现这一目标: 1. 将`n`转换为二进制表示。 2. 从最低位开始,找到最右边的一个`1`,将它...

    C++求1到n中1出现的次数以及数的二进制表示中1的个数

    另一个问题是,给定一个整数,我们需要计算其二进制表示中1的个数。这个问题可以通过不同的方法解决。 **解法一**: 这是最直接的方法,不断将数字除以2并取余,直到余数为0。每次余数为1时,计数器加1。 ```cpp ...

    数字电路技术

    - **例1-1**: 将二进制数(110101.101)₂转换为十进制数。 - 解析过程: (110101.101)₂ = 1×2⁵ + 1×2⁴ + 0×2³ + 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 32 + 16 + 0 + 4 + 0 + 1 + 0.5...

    微机原理与接口技术试题库(含答案)汇总.doc

    1. **ASCII码**是一种用于电子通信的标准字符编码方案,它可以将各种字符(如字母、数字、控制字符等)转换为特定的二进制代码。 - **换行**: `0AH` 表示ASCII码中的换行符,其对应的十进制值为10。 - **字母“Q”...

    php实现统计二进制中1的个数算法示例

    在PHP编程中,有时我们需要计算一个二进制数中1的个数,这在计算机科学中被称为“位计数”或“位集”。本篇将详细介绍两种PHP实现统计二进制中1的个数的算法,并提供相关代码示例。 **问题描述** 给定一个十进制...

    数字电子技术基础 第四版

    - **原码**:直接表示一个数的二进制形式,最高位通常表示符号位(0表示正,1表示负)。 - **补码**:在原码的基础上,正数的补码与其原码相同,负数的补码是其原码除符号位外所有位取反后加1。 #### 3. 逻辑函数的...

    逻辑与计算机设计基础3三版答案

    最后,书中的练习还涵盖了BCD(二进制编码的十进制)编码,这是一种将十进制数用二进制表示的方法,例如(694)10对应(0110 1001 0100)BCD。BCD编码在数字电路和计算中用于确保精确的十进制表示。 总的来说,《逻辑与...

    CSP-J 初赛模拟题附答案

    - **解析**: 32位整型变量在大多数计算机体系结构中占用4个字节的空间,这是因为32位可以表示从0到2^32-1的整数范围。 ### 4. 等价的赋值语句 - **知识点**: 题目中的循环体为`s=s-1`,执行了`c`次。等价的赋值语句...

    从0到N的数中总共包含1的数目

    程序提供了两种方法来解决这个问题:一种是基于十进制数的计算,另一种是通过二进制表示进行计数。 对于十进制算法,我们可以采用动态规划或者简单的遍历来计算。动态规划方法可以创建一个数组,记录到某个数为止1...

    计算机组成原理 课后习题 答案

    ### 计算机组成原理知识点解析...- **最大数与最小数表示**:根据浮点数格式计算出最大数和最小数的二进制表示。 以上内容基于给定的章节题目和描述进行了详细解析,旨在帮助读者更好地理解计算机组成原理的基础知识。

    python-leetcode面试题解之第268题丢失的数字.zip

    因为 n+1 的二进制表示中,除了最高位外,其他位都是1。如果某个元素在列表中,那么它的二进制表示与 n+1 的对应位会被清零。最后,得到的结果就是丢失的数字。这种方法适用于n不是2的幂的情况。 2. **数学法**: ...

    -程序员面试智力算法题汇总一.docx

    - **问题描述**:对于一个正整数,计算其二进制表示中1的个数。 - **解法一**:使用模2操作逐位检查是否为1,时间复杂度为O(log N)。 - **解法二**:利用位运算,通过与操作判断末位是否为1,时间复杂度为O(log N)。...

    数位计数问题解法研究

    首先,观察问题本质,可以发现如果能够找到一个方法计算从0到B的所有数的数位之和,那么通过同样的方法计算从0到A-1的数位之和,两者相减即可得到目标区间的数位总和。因此,问题可以转化为计算从0到B的数位之和。 ...

    程序员面试题100题(63)-数组中三个只出现一次的数字[算法].pdf,这是一份不错的文件

    首先,我们要定义一个函数 `f(n)`,该函数的作用是将数字 `n` 的二进制表示中最后一个为1的位保留,其余位变为0。例如,对于十进制数6(二进制为0110),`f(6)`的结果为2(二进制为0010)。 题目中提到,对于非零的...

    浅谈信息学竞赛中的“0”和“1”

    在计算机科学领域,二进制(Binary)是一种基本的数制,其核心是使用0和1两个数字进行数据表示。这种数制在现代电子计算机技术中扮演着至关重要的角色。由于二进制系统简单且易于通过电子设备实现,因此它成为了现代...

    数字信号处理课程总结(公式全是用公式编辑器编的哦) --【20页】.pdf

    - **编码**:将幅度值表示成二进制位。 2. **数字信号处理**:对信号进行运算处理。 3. **信号重建**:通过数/模转换将处理后的数字信号转换回模拟信号。 - **平滑滤波**:滤除高频成分,使信号平滑。 - **数字...

    数字信号处理练习题参考答案

    - **解法三**:通过观察累加器A中的值`-16000000H`,可以将其转换为二进制并计算出小数部分的值为`01011B`,进而得到`-11 / 25 = -0.34375`。 - **知识点4:FRCT标志的作用** 在不同的处理器架构中,FRCT标志...

    FunnyAlgorithm:算法趣题解法保存

    求用十进制、二进制、八进制表示都是回文数的所有数字中,大于十进制数 10 的最小值。 增加限制:二进制不补0 Q2 数列的四则运算 组合的方法是在各个数字之间插入四则运算的运算符组成算式,然后计算算式的结果(某些...

Global site tag (gtag.js) - Google Analytics