lowbit函数

发布时间 2023-08-27 23:43:56作者: -37-

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的个数:

26. 二进制中1的个数 - AcWing题库

#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;
}