标签:
问题描述:
对于一个字节(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 }
解法二:使用位操作
标签:
原文地址:http://www.cnblogs.com/qinduanyinghua/p/5864151.html