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;
}
标签:反码,函数,int,lowbit,补码,二进制,原码
From: https://www.cnblogs.com/-37-/p/17661141.html