diff --git a/bit_manipulation/check_even_odd.cpp b/bit_manipulation/check_even_odd.cpp new file mode 100644 index 00000000000..17ad0707cac --- /dev/null +++ b/bit_manipulation/check_even_odd.cpp @@ -0,0 +1,93 @@ +/** + * @file + * @brief Implementation to [Check if a number is Even or Odd using Bitwise Operator] + * (https://www.log2base2.com/c-examples/bitwise/odd-or-even-program-in-c-using-bitwise-operator.html) + * + * @details + * Given an integer N, determine whether it is even or odd using bitwise manipulation. + * The least significant bit (LSB) of a binary number determines its parity: + * - If the LSB is 0, the number is even. + * - If the LSB is 1, the number is odd. + * + * This can be checked efficiently using the bitwise AND operator (&) with 1. + * - If (N & 1) == 0, N is even. + * - If (N & 1) == 1, N is odd. + * + * Example: + * Consider 8-bit binary representations of two numbers: + * Number: 10 (decimal) -> 00001010 (binary) + * LSB = 0 -> Even number + * + * Number: 13 (decimal) -> 00001101 (binary) + * LSB = 1 -> Odd number + * + * In both cases, evaluating (N & 1) isolates the LSB: + * - For 10: 00001010 & 00000001 = 0 (Even) + * - For 13: 00001101 & 00000001 = 1 (Odd) + * + * Worst Case Time Complexity: O(1) + * Space Complexity: O(1) + * + * @author [Vedant Mukhedkar](https://github.com/git5v) + */ + +#include /// for assert +#include /// for uint32_t +#include /// for IO operations +#include /// for std::string + +/** + * @namespace bit_manipulation + * @brief Bit manipulation algorithms + */ +namespace bit_manipulation { +/** + * @namespace even_odd + * @brief Functions for checking if a number is even or odd using bitwise operations + */ +namespace even_odd { + +/** + * @brief Checks if a number is even or odd using bitwise AND. + * @param N The number to check. + * @returns "Even" if N is even, "Odd" if N is odd. + */ + bool is_even(std::int64_t N) { + return (N & 1) == 0 ? true : false; + } + + } // namespace even_odd +} // namespace bit_manipulation + +/** + * @brief Self-test implementations + * @returns void + */ +static void test() { + using bit_manipulation::even_odd::is_even; + + // Test Even numbers + assert(is_even(0) == true); + assert(is_even(2) == true); + assert(is_even(100) == true); + assert(is_even(-4) == true); + assert(is_even(-1000) == true); + + // Test Odd numbers + assert(is_even(1) == false); + assert(is_even(3) == false); + assert(is_even(101) == false); + assert(is_even(-5) == false); + assert(is_even(-999) == false); + + 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; +}