统计整数二进制表示中1的个数
正则表达式之一
网络惊现杆状病毒
这是一个很有意思的问题,也是在面试中最容易被问到的问题之一.这个问题有个正式的名字叫Hamming_weight,而且wikipedia上也提供了很好的位运算解决的方法,这个下面也会提到.
解决这个问题的第一想法是一位一位的观察,判断是否为1,是则计数器加一,否则跳到下一位,于是很容易有这样的程序.
int test(int n)
while(n != 0){
if(n%2 ==1)
n /= 2;
或者和其等价的位运算版本:
count += n&1;
这样的方法复杂度为二进制的位数,即[tex]\log_2n[/tex],于是可是想一下,有没有只与二