算法学习笔记(7)——位操作

位操作

lowbit原理

根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形式是补码,也就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000,就是我们想要的lowbit操作

题目链接:AcWing 801. 二进制中1的个数

#include <iostream>

using namespace std;

int lowbit(int x) { return x & -x; }

int main()
{
    int n;
    cin >> n;
    
    while (n -- ) {
        int x;
        cin >> x;
        int res = 0;
        while (x) {
            x -= lowbit(x);
            res ++;
        }
        cout << res << ' ';
    }
    
    return 0;
}
posted @ 2022-12-09 22:05  S!no  阅读(34)  评论(0编辑  收藏  举报