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

解法一:除、余操作

我们知道,对于二进制操作,除以一个2,原来的数字将会减少一个0,如果除的过程中有余,那么就表示当前位置有一个1,所以可通过相除和判断余数的值来分析。

【时间复杂度O(log2v),log2v为二进制数的位数,空间复杂度O(1)】

1 int Count(int v){
2     int num = 0;
3     while(v){
4         if(v % 2 == 1) num++;
5         v = v/ 2;
6     }
7     return num;
8 }
View Code

相关文章: