-
判断一个整数的二进制位中有多少个1 - [技术相关]2006-10-21
设整数i的二进制位长为n,1的个数为m:
1.很直观的一种解法:i依次& 2^0 ~ 2^(n-1), 然后判断每次的结果。依此计1的个数。其时间复杂度为O(n)
2.循环:对i做逻辑右移,判断右移后是否为0,0则停止。判断 & 1的结果;计数。该方法的时间复杂度介于O(n)~O(m)之间。目前看到的,最好的是3.中所用的方法:
3.循环: x = x & ( x - 1 ); count++; 直到x为0为止。该方法的时间复杂度是O(m)
Tags: 算法



解答在这里:http://www.cnblogs.com/dust/archive/2008/05/11/1192639.html
博主可以问一下吗?第三种方法的原理是什么呢?不知道为什么这么做是对的,能给我解释一下吗?非常感谢,发到我邮箱可以吗yjdlut@qq.com,谢谢
也是,最大不过64次循环
32bit,64bit,没有什么效率好说的,觉得都是O(1)
嵌入式不懂