【基础算法】位运算之lowbit操作

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;
}
271 views
Comments
登录后评论
Sign In
·

问: 补码为啥这么设计?