读书笔记一:求二进制数中1的个数

Posted 琴影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记一:求二进制数中1的个数相关的知识,希望对你有一定的参考价值。

问题描述:

        对于一个字节(8bit)的无符号整型变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能高效。

        在编写程序的过程中,根据实际应用的不同,对存储空间或效率的要求也不一样。比如在PC上与在嵌入式设备上的程序编写就有很大的差别。

分析与解法:

解法一:

   举一个八位的二进制例子来分析。对于二进制操作,我们知道,除以一个2,原来的数字将会减少一个0.如果除的过程中有余,那么就表示当前位置有一个1.

以10100010为例:

第一次除以2时,商为1010001,余为0.

第二次除以2时,商为101000,余为1.

因此,可以考虑利用整型数据除法的特点,通过相除和判断余数的值来分析。

 

 1 int BitCount(unsigned int n)
 2 {
 3     unsigned int c =0 ; // 计数器
 4     while (n)
 5     {
 6         if(n % 2 ==1) // 当前位是1
 7             c++ ; // 计数器加1
 8         n = n / 2;
 9     }
10     return c ;
11 }

 

 

 

解法二:使用位操作

 

以上是关于读书笔记一:求二进制数中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

求二进制数中1的个数

求二进制数中1的个数

算法-求二进制数中1的个数

求二进制数中1的个数——引发的问题

位运算求二进制数中1的个数

近乎O求二进制数中1的个数