diff --git a/bit_manipulation/count_of_set_bits.cpp b/bit_manipulation/count_of_set_bits.cpp new file mode 100644 index 000000000..4d36b5570 --- /dev/null +++ b/bit_manipulation/count_of_set_bits.cpp @@ -0,0 +1,69 @@ +/** + * @file + * @brief Program to Count set bits in an integer + * + * @details + * Time Complexity :- O(log n) + * Space complexity :- O(1) + * @author [Swastika Gupta](https://github.com/swastyy) + */ + +#include /// for assert +#include /// for io operations +#include /// for std::vector + +/** + * @namespace bit_manipulation + * @brief bit set counting algorithm + */ +namespace bit_manipulation { +/** + * @namespace bitCount + * @brief Functions for counting set bits in binary representation of a number + */ +namespace bitCount { +/** + * @brief The main function implements set bit count + * @param n is the number whose set bit will be counted + * @returns count , the number set bit in binary representation of n + */ + +std::uint64_t countSetBits(unsigned 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(); // execute the test + return 0; +}