//输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
#include<vector>
#include<iostream>
using namespace std;
int NumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n=n&n-1;//妙用
}
return count;
}
void main()
{
cout<<NumberOf1(-1);
while(1);
}
巧在n&n-1上,每次去掉右侧的1
其他妙用还有: 判断一个数是否是2的方幂:
if( n > 0 && (n & (n - 1)) == 0 )