lowbit函数
lowbit(n)取出n在二进制表示下最低位的1的位置
int lowbit(int x) {
	return (x & -x);
}
原理就是将x的原码与上x的补码(-x:补码, ~x:反码, 补码等于反码加一)
eg:
6的原码:0110
6的补码:1010
&运算:   0010
实际上就是最低位1的位置,但转化为十进制就是最低位的1以及它后面的0构成的数值
通过这方法可以求二进制中1的个数:
#include <iostream>
using namespace std;
int lowbit(int x) {
	return (x & -x);
}
int main() {
    int n, res = 0;
    cin >> n;
    while (n) n -= lowbit(n), res++;
    cout << res;
    return 0;
}
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号