lowbit作用:快速找到一个数中二进制的最后一个1以及后面所有0的组合
lowbit核心:一个数的原码 & 补码(即该数的负数)
举个例子:
原码 = 101010101000000
补码 = 010101011000000
原码&补码 = 000000001000000 = 1000000
算法应用例题:
求二进制中1的个数
#include<iostream>
using namespace std;
int lowbit(int n)
{
return n & (-n);
}
int main()
{
int n, res = 0;
cin >> n;
while(n)
{
n -= lowbit(n); //每次减掉最后一个1及其后面所有0的部分
res++;
}
cout << res << endl;
return 0;
}