---
# System prepended metadata

title: 'LeetCode : 0191. Number of 1 Bits (bits)'
tags: [leetcode]

---

# LeetCode : 0191. Number of 1 Bits (bits)
###### tags:`leetcode`
```
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <unordered_map>
using std::vector;
using std::unordered_map;
using namespace std;

class BaseVectorPrint {
    public:
        void BasePrint00(vector<int>& num) {
            for (size_t i = 0; i < num.size(); ++i) {
                cout << "[" <<num.at(i) << "]" << "; ";
            }
            cout << endl;
        }

        void BasePrint01(vector<int>& num) {
            for (size_t i = 0; i < num.size(); ++i) {
                cout << num[i] << "; ";
            }
            cout << endl;
        }

        void BasePrint02(vector<int>& num) {
            for (const auto &item : num) {
                cout << item << "; ";
            }
            cout << endl;
        }
        
        void TwoDimensionalPrint(vector<vector<int>> &num){
            for (int i = 0; i < num.size(); i++)
            {
                for (int j = 0; j < num[i].size(); j++)
                {
                    cout << "[" << num[i][j] << "]";
                }
                cout << endl;
            }
        }
};

class Solution01 {
public:
    int hammingWeight(uint32_t n) {
        int count=0;
        while (n) {
            // let's and(&) each bit with 1, if the result is 1 then we increment count by 1
            if (n&1 > 0) count++;
            // and then shift n by 1 bit [so that we can check the next bit is 1 or not]
            n>>=1;
        }
        return count;
    }
};

class Solution02 {
public:
    int hammingWeight(uint32_t n) {
        int count=0;
        while (n) {
            // when we substract n by 1, the Lowest significant 1 is affected first, thus 
            // when we use and (&) operation the other 1's stay intact and we increment count by 1
            n &= (n-1);
            count++;
        }
        return count;
    }
    //sample run 
    
    // iunput number 5 = 1001
    
    // one step = n-1 = 4 = 1000
    // 1001 & 1000 = 1000
    
    // two step = n-1 = 3 = 0111
    // 1000 & 0111 = 0
    
    // out function and return count.
};

int main(void)
{
    BaseVectorPrint printVector;
    Solution02 runfunc;

    vector<int> test01 = {  4,  5,  1,  8,  2 };
    vector<int> test02 = {  1,  2,  3,  4 };
    vector<int> test03 = { -1,  1,  0, -3,  3 };
    vector<int> ans ;

    int input_number = 31;
    int input_number2 = 5;

    int intans;

    intans = runfunc.hammingWeight(input_number2);
    //printVector.BasePrint00(ans);

    printf("all 1 counts = %d\n",intans);
    printf("test\n");
    system("pause");
}
```

> Tip opeator shift 【>>】