`
izuoyan
  • 浏览: 9230045 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【编程之美】2.1 - 求二进制数中1的个数

阅读更多
  • 问题描述:对于一个字节(8bit)的无符号整形变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高。

  • 解法一:利用整形数据除法的特点,通过相除和判断余数的值来分析
  • 解法二:利用向右移位操作来达到上面的相处的效果
  • 解法三:在每次判断中,仅与1来进行判断【不易想到,较为巧妙】
  • 解法四:使用分支操作:因为只有8位数据,直接把0~255的情况都进行罗列【使用了空间换时间的方法】
  • 解法五:查表法【时间复杂度为O(1)】,在一个需要频繁使用这个算法的应用中,通过“空间换时间”来获取高的时间效率是一个常用的方法。



分享到:
评论

相关推荐

    beauty of programming's code

    2.1 求二进制数中 1 的个数 这部分给出了两种不同的C语言函数,用于计算一个字节(8位二进制数)中1的个数。两种方法都采用了位操作来实现: - 第一种方法(Count函数):通过逐位检查二进制数的每一位,每遇到1就...

    数字逻辑1

    - 是一种二进制编码,其中任意两个相邻的编码只有一位二进制数不同。 - 具体编码逻辑是前一半数值左最高位为0,其余位由原二进制编码的每一位与其左侧相邻位的偶校验构成。 #### 二、布尔代数 **2.1 布尔代数...

    S7-200PLC编程及应用(第2版)-课后习题答案.pdf

    3. BCD码(二进制编码的十进制数)用4位二进制数表示,范围从二进制的0000到1001,对应十进制的0至9。 4. 二进制数2#0100 0001 1000 0101转换成十六进制为16#4185,十进制为16773,其绝对值相等的负数的补码为2#1011...

    基于fpga的含1数字电路设计(状态机编程)

    在本文中,我们将探讨一个基于FPGA(Field-Programmable Gate Array)的数字电路设计,该设计着重于实现一个能统计1个数的状态机。这个设计使用Quartus软件进行编程,目的是通过按键输入串行数据,并在数码管上以...

    c_c++笔试题汇总_软件工程师学习用

    题目中给出的第一个示例是一个用于计算整数二进制表示中1的个数的函数。通过不断执行`x = x & (x - 1)`这一操作,函数能够逐个消除x二进制表示中的每个1,同时计数器`countx`递增,直到x变为0。这个技巧基于一个数学...

    编写程序判断一个IP地址是否合法,并判断该地址是否属于一个给定的子网

    - **子网掩码**:子网掩码也是一个32位的二进制数,用于区分IP地址中的网络部分和主机部分。 ##### 5.2 特殊的IP地址形式 - **直接广播地址**:A类、B类与C类网络都定义了直接广播地址。直接广播地址是指将子网...

    C#编程经验技巧宝典

    58 <br>0081 文本中首字母改为大写 59 <br>0082 C#随机数的产生 59 <br>0083 身份证从15位升至18位算法 60 <br>0084 十进制数转二进制数的算法 60 <br>0085 十进制数转八进制数的算法 61...

    proteus8086实验指导书

    - **实验八:求表中正数、负数、0的个数实验** - 实验目标:掌握数组元素分类统计的方法。 - **实验九:IO口读写实验(245、373)** - 实验目标:理解并行I/O端口的基本操作。 - **实验十:8255并行I/O扩展实验**...

    经典的C语言算法实例

    - **问题描述**:将一个十进制数转换成二进制形式。 - **算法思路**:通过不断的除以2取余数的方法实现。 ##### 3.13 十六进制转为十进制 - **问题描述**:将一个十六进制数转换成十进制形式。 - **算法思路**:...

    foreverzeus大木板 acm模板

    - **算法**: 使用二进制指数法进行优化,减少乘法次数。 #### 1.6 分解质因数 - **定义**: 将一个合数表示为其所有质因数的乘积。 - **方法**: 迭代试除法、轮询法等。 - **应用**: 在加密算法、数论等领域非常有用...

    数据结构(C++)有关练习题

    内容及步骤: 1、 设有一个线性表(e0,e1,e2,e3,…,en-2,en-1)存放在一个一维数组A[arraySize]中的前n个数组元素位置。请编写一个函数将这个线性表原地逆置,即将数组的前n个原地址内容置换为(en-1,en-2,…,e3,...

    2021-2022计算机二级等级考试试题及答案No.9855.docx

    - **解析**: OLE对象类型用于存储二进制大对象(BLOB),非常适合存储图像、音频和视频文件等非文本数据。 #### 13. 创建包 - **知识点**: 创建一个名为MyPackage的包的语句是`package MyPackage;`,且该语句应位于...

    2020_秋季_数字系统设计作业_part_2_a1

    这意味着你需要计算输入字中的1的个数,并用4位二进制数表示。同样,需要一个测试平台来验证其功能。 在进行这些设计时,确保你的Verilog代码符合良好的编程规范,逻辑清晰,易于理解和维护。同时,对于每个模块,...

    Java 自学宝典 第二章 数据类型

    `Integer.bitCount(int i)` 方法用于计算 `int` 类型变量的二进制表示中1的个数。 ```java int num = 10; // 二进制形式为 1010 System.out.println(Integer.bitCount(num)); // 输出 2 ``` ##### 2.6.4 Highest ...

    c语言经典算法

    十进制转二进制是计算机科学中的基本技能之一,通过C语言中的位运算和循环控制,可以实现高效的转换算法,加深对二进制系统理解。 #### 3.13 十六进制转为十进制 十六进制到十进制的转换,涉及到进制间的数学转换...

    python基础1

    整形可以使用内置函数 `bin()`、`oct()` 和 `hex()` 将十进制整数转化为二进制、八进制和十六进制字符串。整形的创建可以使用 `int()` 函数,将字符串或浮点数转化为整形。 示例代码: ``` print(int(118.12)) # ...

Global site tag (gtag.js) - Google Analytics