From edda74711df6bf26ae14cc5ef1065e2a112e33d0 Mon Sep 17 00:00:00 2001 From: Swastika Gupta <64654203+Swastyy@users.noreply.github.com> Date: Sun, 27 Jun 2021 21:34:03 +0530 Subject: [PATCH] Create count_of_set_bits.cpp --- bit_manipulation/count_of_set_bits.cpp | 69 ++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 bit_manipulation/count_of_set_bits.cpp 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; +}