整数的二进制数表达中有多少个1

整数的二进制数表达中有多少个1

题目描述

给定一个32位整数n,返回该整数二进制形式1的个数。

输入描述:

输入一个整数,代表n,n为32为整数。

输出描述:

输出一个整数,代表n的二进制表达式中1的个数。

示例1
输入
1
输出
1
示例2
输入
-2
输出
31
备注:

时间复杂度 O ( 1 ) O(1) O(1),额外空间复杂度 O ( 1 ) O(1) O(1)


题解:

若按位进行枚举,则需要枚举32位,效率略微有点低。我们可以只考虑 1 的位,有两种方法可以取得二进制最右边为 1 的位:

  • n & (n - 1)
  • n & (~n + 1)

两种方法均可以取得 n 的二进制表示中最右边为 1 的位,然后将这个 1 去掉,继续处理剩下的,直到所有的 1 处理完毕即可。

代码:
#include <cstdio>

using namespace std;

int main(void) {
    
    
    int n;
    scanf("%d", &n);
    int num = 0;
    while (n) {
    
    
        ++num;
        //n &= (n - 1);
        n -= n & (~n + 1);
    }
    return 0 * printf("%d\n", num);
}

猜你喜欢

转载自blog.csdn.net/MIC10086/article/details/109114804