- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# Count of numbers having only 1 set bit in the range [0, n] in C++

We are given a number and the task is to calculate the count of numbers from the range 0 till the given number let’s say, num having exactly one set bit

Set bits in a binary number is represented by 1. Whenever we calculate the binary number of an integer value then it is formed as the combination of 0’s and 1’s. So, the digit 1 is known as set bit in the terms of the computer.

**Input** − int num = 15

**Output** − Count of numbers having only 1 set bit in the range [0, 15] are − 4

**Explanation** − The given number is 15 therefore the range is 0-15. Now calculate the 4 digit

binary number for −

0 -> 0000 = 0 set bit, 1 -> 0001 = 1 set bit, 2 -> 0010 = 1 set bit, 3 -> 0011 = 2 set bit, 4 -> 0100 = 1 set bit, 5 -> 0101 = 2 set bit, 6 -> 0110 = 2 set bit, 7 -> 0111 = 3 set bit, 8 -> 1000 = 1 set bit, 1 -> 1001 = 2 set bit, 10 -> 1010 = 2 set bit, 11 -> 1011 = 3 set bit, 12 -> 1100 = 2 set bit, 13 -> 1101 = 3 set bit, 14 -> 1110 = 3 set bit, 15 -> 1111 = 4 set bits. Now, we will choose the numbers with exactly one set bits and those are 1, 2, 4 and 8.

**Input** − int num = 4

**Output** − Count of numbers having only 1 set bit in the range [0, 15] are − 3

**Explanation** − The given number is 4 therefore the range is 0-4. Now calculate the 4 digit binary

number for −

0 -> 0000 = 0 set bit, 1 -> 0001 = 1 set bit, 2 -> 0010 = 1 set bit, 3 -> 0011 = 2 set bit, 4 -> 0100 = 1 set bit. Now, we will choose the numbers with exactly one set bits and those are 1, 2 and 4.

## Approach used in the below program is as follows

There can be multiple approaches to solve the given problem i.e. naive approach and efficient approach. So let’s first look at the **naive approach**.

Input the number and pass it to the function for further processing.

Take a temporary variable count to store the count of numbers in the range with set bit as exactly 1

Start loop FOR from i to 1 till the number

Inside the loop, set a temp variable with ‘ __builtin_popcount(i)’, the function that returns the number of set bits.

Check IF temp = 1 then increment the count

Return count

Print result

## Efficient approach

Input the number and pass it to the function for further processing.

Take a temporary variable count to store the count of numbers in the range with set bit as exactly 1

Start loop While from temp till temp <= number

Inside the loop, increment the count by 1 and set temp as temp * 2

Return count

Print result

## Example (naive approach)

#include <iostream> using namespace std; //function to Count of numbers having only 1 set bit in the range [0, n] int set_bits(int number){ int count = 0; for (int i = 1; i <= number; i++){ int temp = __builtin_popcount(i); if (temp == 1){ count++; } } return count; } int main(){ int number = 15; cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number); return 0; }

## Output

If we run the above code it will generate the following output −

Count of numbers having only 1 set bit in the range [0, 15] are: 4

## Example (Efficient approach)

#include <iostream> using namespace std; //function to Count of numbers having only 1 set bit in the range [0, n] int set_bits(int number){ int count = 0; int temp = 1; while(temp <= number){ count++; temp = temp *2; } return count; } int main(){ int number = 15; cout<<"Count of numbers having only 1 set bit in the range [0, "<<number<<"] are: "<<set_bits(number); return 0; }

## Output

If we run the above code it will generate the following output −

Count of numbers having only 1 set bit in the range [0, 15] are: 4