TheAlgorithms-C-Plus-Plus/bit_manipulation/count_of_set_bits.cpp
Swastika Gupta 34556ad939
Create count_of_set_bits.cpp (#1515)
* Create count_of_set_bits.cpp

* Update count_of_set_bits.cpp

* updating DIRECTORY.md

* clang-format and clang-tidy fixes for d0dc7eb3

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* clang-format and clang-tidy fixes for f8606e8f

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* clang-format and clang-tidy fixes for 40e0f745

* Update count_of_set_bits.cpp

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

* Update bit_manipulation/count_of_set_bits.cpp

Co-authored-by: David Leal <halfpacho@gmail.com>

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
Co-authored-by: David Leal <halfpacho@gmail.com>
2021-07-09 15:13:57 +05:30

81 lines
2.4 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 count_of_set_bits
* @brief Functions for the [count sets
* bits](https://www.geeksforgeeks.org/count-set-bits-in-an-integer/)
* implementation
*/
namespace count_of_set_bits {
/**
* @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 count_of_set_bits
} // namespace bit_manipulation
/**
* @brief Self-test implementations
* @returns void
*/
static void test() {
// n = 4 return 1
assert(bit_manipulation::count_of_set_bits::countSetBits(4) == 1);
// n = 6 return 2
assert(bit_manipulation::count_of_set_bits::countSetBits(6) == 2);
// n = 13 return 3
assert(bit_manipulation::count_of_set_bits::countSetBits(13) == 3);
// n = 9 return 2
assert(bit_manipulation::count_of_set_bits::countSetBits(9) == 2);
// n = 15 return 4
assert(bit_manipulation::count_of_set_bits::countSetBits(15) == 4);
// n = 25 return 3
assert(bit_manipulation::count_of_set_bits::countSetBits(25) == 3);
std::cout << "All test cases successfully passed!" << std::endl;
}
/**
* @brief Main function
* @returns 0 on exit
*/
int main() {
test(); // run self-test implementations
return 0;
}