获取一个数字的二进制表示中有多少个数字11

参考:https://www.cnblogs.com/littlehb/p/15464421.html


#define lowbit(x) (x & -x) int f3(int x) { int res = 0; while (x) { x -= lowbit(x); res++; } return res; }

4、完整测试代码
#include <bits/stdc++.h>

using namespace std;

#define lowbit(x) (x & -x)

// 1、传统的整数按位向右移动,效率稍差,贵在好理解
int f1(int n) {
    int res = 0;
    for (int i = 0; i < 32; i++)
        if ((n >> i) & 1) res++;
    return res;
}

// 2、使用 x & (x-1)
int f2(int x) {
    int res = 0;
    while (x) {
        x = x & (x - 1);
        res++;
    }
    return res;
}

// 3、lowbit函数法
int f3(int x) {
    int res = 0;
    while (x) {
        x -= lowbit(x);
        res++;
    }
    return res;
}

int main() {
    int n;
    scanf("%d", &n);
    printf("%d\n", f1(n));
    printf("%d\n", f2(n));
    printf("%d\n", f3(n));
    return 0;
}
posted @ 2025-04-15 17:49  katago  阅读(14)  评论(0)    收藏  举报