Files
C-Plus-Plus/bit_manipulation/count_of_set_bits.cpp
Swastika Gupta bf3b032bd4 Update bit_manipulation/count_of_set_bits.cpp
Co-authored-by: David Leal <halfpacho@gmail.com>
2021-07-09 07:14:44 +05:30

79 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file
* @brief Implementation to [count sets
* bits](https://www.geeksforgeeks.org/count-set-bits-in-an-integer/) in an
* integer.
*
* @details
* We are given an integer number. Lets say, number. The task is to first calculate the
* binary digit of a number and then calculate the total set bits of a number.
*
* Set bits in a binary number is represented by 1. Whenever we calculate the binary number of an integer value
* it is formed as the combination of 0s and 1s. So digit 1 is known as a set bit in computer terms.
* Time Complexity :- O(log n)
* Space complexity :- O(1)
* @author [Swastika Gupta](https://github.com/swastyy)
*/
#include <cassert> /// for assert
#include <iostream> /// for io operations
#include <vector> /// for std::vector
/**
* @namespace bit_manipulation
* @brief Bit manipulation algorithms
*/
namespace bit_manipulation {
/**
* @namespace bitCount
* @brief Functions for the [count sets
* bits](https://www.geeksforgeeks.org/count-set-bits-in-an-integer/)
* implementation
*/
namespace bitCount {
/**
* @brief The main function implements set bit count
* @param n is the number whose set bit will be counted
* @returns the count of the number set bit in the binary representation of `n`
*/
std::uint64_t countSetBits(int n) {
int count = 0; // "count" variable is used to count number of 1's in binary
// representation of the number
while (n != 0) {
count += n & 1;
n = n >> 1; // n=n/2
}
return count;
}
} // namespace bitCount
} // namespace bit_manipulation
/**
* @brief Test implementations
* @returns void
*/
static void test() {
// n = 4 return 1
assert(bit_manipulation::bitCount::countSetBits(4) == 1);
// n = 6 return 2
assert(bit_manipulation::bitCount::countSetBits(6) == 2);
// n = 13 return 3
assert(bit_manipulation::bitCount::countSetBits(13) == 3);
// n = 9 return 2
assert(bit_manipulation::bitCount::countSetBits(9) == 2);
// n = 15 return 4
assert(bit_manipulation::bitCount::countSetBits(15) == 4);
// n = 25 return 3
assert(bit_manipulation::bitCount::countSetBits(25) == 3);
std::cout << "All test cases passed" << std::endl;
}
/**
* @brief Main function
* @returns 0 on exit
*/
int main() {
test(); // run self-test implementations
return 0;
}