位运算 二进制中1的个数

题目

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

题解

十进制转二进制先模后除就可以。
对于负数,我们需要输出其绝对值的补码。
当出现负数时,记录该数字为负数,取绝对值。对二进制进行遍历,判断该位是1还是0,并记录。
如果该数字是负数则输出32 - 0的个数,否则输出1的个数
(也可以直接bitCount)。

AC代码

方法1

class Solution {
public:
    int NumberOf1(int n) {
        bool flag = false;
        if (n < 0) {
            flag = true;
            n = -n;
        }
        int z = 0, o = 0;
        while (n != 0) {
            int t = n % 2;
            if (t==0) z++;
            else o++;
            n /= 2;
        }
        return flag ? (32 - z) : o;
    }
};

方法2

class Solution {
public:
    int NumberOf1(int n) {
        int cnt = 0;
        while (n) {
        	n &= (n-1);
        	cnt++;
        }
        return cnt;
    }
};

方法3

class Solution {
    public int NumberOf1(int n)
    {
        return Integer.bitCount(n);
    }
}

你可能感兴趣的:(位运算,题题题题题,#,各种比赛,#LeetCode,#,各种培训,补码,位运算)