算法-二进制中1的个数详解编程语言

/*
	[二进制中 1 的个数]
    
    [题目]
	输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    [解析]
    方法1: 
        常规思路(如代码中的 NumberOf1Mask),逐位数 1 的个数,执行 32 次循环 
        (注意,这里使用标志变量,而不是直接对输入变量进行移位,因为如果右移有符号整数,左边补的是符号位,最后进入死循环)
    方法2:
        小trick(如代码中的 NumberOf1Trick),代码中有多少个 1 就执行多少次循环。
*/

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Solution{
public:
    int  NumberOf1(int n) {
        //return NumberOf1Mask(n);
        return NumberOf1Trick(n);
    }

    int NumberOf1Trick(int n){
        int ans = 0;
        while(n){
            ans ++;
            n = n & (n-1);
        }

        return ans;
    }

    int NumberOf1Mask(int n){
        int ans = 0;
        unsigned int mask = 1;

        while(mask){
            if(n & mask)
                ans++;
            mask <<= 1;
        }

        return ans;
    }
};

int main()
{
    return 0;
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15311.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论