Before we describe this function, can you think of a solution to the problem: “**Count Set bits in a given integer?**“, In simple words, count the number of bit positions in binary representation of an integer which is set to 1?

How will you solve this problem?

// Here is a solution int count_setbits(int N) { int cnt=0; while(N>0) { cnt+=(N&1); N=N>>1; } return cnt; }

Above is a simple solution to the problem.

The solution works as follows:

- Until the given number is greater than zero, that is, until all bits in the number is not set to 0.
- Keep on doing bitwise AND with the number 1, which has only first bit 1.
- and, keep on shifting the bits by 1 place to right in the input number.
- Simultaneously, keep on calculating count.

**What if we could have solved this using a single line of code?**

*Yes, it’s possible using the function __builtin_popcount() in STL. *

The function takes an unsigned integer as input parameter and returns the number of set bits present in that integer.

**Syntax:**

__builtin_popcount(int num);

**Note:** This function only works for unsigned or positive integers.

**Code:**

```
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n = 7;
cout<<__builtin_popcount(n);
return 0;
}
```

**Output**:

3

**What if the integer is of the type “long long” and not fits in the range of int?**

In that case, there is a separate function with slight variation in function name but serves exactly the same purpose. The function is __builtin_popcountll(). Notice the ll in the end of function name.

Below is the implementation of the above function:

**Code:**

```
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
long long n = 77777777777777;
cout<<__builtin_popcountll(n);
return 0;
}
```

**Output**:

23