位运算的应用
#include<iostream>
using namespace std;
//利用位运算
// 1001 - 1 = 1000 1001&1000 = 1000
// 1000 - 1 = 0111 1000&0111 = 0000
// 每次减一会把低位的1变0,低位1后的0变1
//如果拿1001和1000做与运算,会消掉一个1
//即 x&(x-1)会消掉一个1,一直到结果为0,循环次数即为1的个数
//int型整数最多31次循环能够确定1的总数
long long total(long long n){
long long s = 0;
while(n){
n = n&(n-1);
s++;
}
return s;
}
int main(){
cout << total(7896321450132);
return 0;
}