问题:对于一个字节(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 }