二进制中1的个数

2017-08-09  本文已影响16人  EJ17zj

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

这个题是一个很简单的题,利用位操作即可。但是鉴于很少有人用bitset类来解决问题,所以整理到此文中。

下面的方法1是基于bitset类求解的方案,直接实例化一个与int等大小的bitset变量,然后赋值,利用内置统计函数count返回结果。

关于bitset类,我之前的博文位变量中有较详细的介绍。

class Solution {
public:
    int  NumberOf1(int n) {
        bitset<sizeof(n) * 8> bn;
        bn = n;
        return bn.count();
    }
};
class Solution {
public:
    int  NumberOf1(int n) {
        int nB = sizeof(n);
        int mask = 0x01;
        int sum = 0;
        for (int i = 0; i < nB * 8; i++) {
            if (n&mask)
                sum++;
            n >>= 1;
        }
        return sum;
    }
};
class Solution {
public:
    int  NumberOf1(int n) {
        int sum = 0;
        while (n) {
            sum++;
            n = n&(n - 1);
        }       
        return sum;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读