75. Register Bitwise Operations

In embedded and firmware systems, hardware registers are often manipulated using bitwise operations such as OR and AND to set, clear, or mask specific bits.

Your task is to implement a C++ class named Reg32 that represents a 32-bit hardware register and supports controlled bitwise operations using operator overloading.

The register must store an unsigned 32-bit value and allow modification using bitwise OR and AND assignments, similar to how registers are manipulated in low-level firmware code.

Task Requirements

Implement a class Reg32 that:

  1. Stores a uint32_t value internally.
  2. Supports the following operations with a 32-bit unsigned integer:
    • reg |= x; → Performs a bitwise OR between the register value and x
    • reg &= x; → Performs a bitwise AND between the register value and x
  3. Overloads:
    • operator uint32_t() const;
      so the object can be printed or used as a normal unsigned integer.

Program Flow

  1. Read three unsigned 32-bit integers:
    1. initial_value  or_value  and_value
      
  2. Create a Reg32 object initialized with initial_value.
  3. Apply the following operations in order:
    1. reg |= or_value;
      reg &= and_value;
      
  4. Print the final value stored in the register.

Input Format

Three space-separated unsigned integers:

initial_value or_value and_value

Output Format

A single unsigned integer representing the final register value after both operations.

 

Example

Input:

8 5 14

Binary Steps:

8   = 1000₂
5   = 0101₂  → OR  → 1101₂ (13)
14  = 1110₂  → AND → 1100₂ (12)

Output:

12

 

Constraints

  • Use operator overloading for |= and &=
  • operator uint32_t() must be implemented
  • Use uint32_t for all register-related values
  • Output must match exactly
  • No additional output or formatting is allowed

 

 

 

 

Loading...

Input

8 5 14

Expected Output

12