63. 8-Bit Register Class

#include <iostream>
#include <cstdint>
using namespace std;

class Reg8 {
private:
    uint8_t value;

public:
    Reg8() : value(0) {}

    void write(uint8_t v) {
        value = v;
    }

    uint8_t read() {
        return value;
    }

    void setBit(int bit) {
        if (bit >= 0 && bit < 8) {
            value |= static_cast<uint8_t>(1u << bit);
        }
    }

    void clearBit(int bit) {
        if (bit >= 0 && bit < 8) {
            value &= static_cast<uint8_t>(~(1u << bit));
        }
    }
};

int main() {
    int initialValue;
    int bitToSet, bitToClear;

    cin >> initialValue >> bitToSet >> bitToClear;

    Reg8 reg;
    reg.write(static_cast<uint8_t>(initialValue));
    reg.setBit(bitToSet);
    reg.clearBit(bitToClear);

    cout << static_cast<int>(reg.read());
    return 0;
}

Explanation & Logic Summary:

  • Bit operations are guarded to prevent undefined behavior
  • uint8_t enforces true 8-bit register semantics
  • Invalid bit indices are safely ignored
  • Explicit casts avoid unintended type promotion
  • Matches real-world firmware register access patterns

Firmware Relevance & Real-World Context:

  • Mirrors MCU register manipulation patterns
  • Reinforces safe bitmasking practices
  • Demonstrates encapsulation used in HAL and driver layers
  • Emphasizes defensive programming critical in firmware

 

 

 

 

Loading...

Input

10 1 3

Expected Output

2