这道题非常简单。我的解法就是最经典的位运算。
#include <iostream>
using namespace std;
int hammingWeight(uint32_t n) {
int cnt=0;
while(n>0) {
if (n&0x1) cnt++;
n>>=1;
}
return cnt;
}
int main()
{
int num=11;
cout<<hammingWeight(num)<<endl;
return 0;
}
看到网上还有个解法比较新颖。它是利用了n&n-1每次可消掉末尾的1这个原理。想想1001&1000就知道了。
int hammingWeight(int n) {
int sum = 0;
while (n != 0) {
sum++;
n &= (n - 1);
}
return sum;
}
我总结的n&n-1的用法
1) 当n为奇数时,n&n-1为小于n的最大偶数。比如说n=5, n&n-1=4。
2) 不管n为奇数还是偶数,n&n-1都可以消去最小位的那个1。