#include <iostream>
#include <bitset>
// A bit‑level memory map is created by defining a data structure
// whose fields correspond to specific bits or bit ranges,
// Use Register struct, fills it with a value, and prints each field
// exactly as the bit‑map defines it.
#include <iostream>
#include <iomanip>
#include <cstdint>
struct Register {
uint32_t value;
uint32_t field4() const { return value & 0xF; } // bits 0–3
uint32_t field3() const { return (value >> 4) & 0xF; } // bits 4–7
uint32_t field2() const { return (value >> 8) & 0xFF; } // bits 8–15
uint32_t field1() const { return (value >> 16) & 0xFFFF; } // bits 16–31
};
int main() {
Register reg;
reg.value = 26;
std::cout << "Raw value: 0x"
<< std::hex << std::setw(8) << std::setfill('0') << reg.value
<< std::dec << "\n\n";
std::cout << "Field breakdown:\n";
std::cout << "field4 (bits 0–3): " << reg.field4() << "\n";
std::cout << "field3 (bits 4–7): " << reg.field3() << "\n";
std::cout << "field2 (bits 8–15): " << reg.field2() << "\n";
std::cout << "field1 (bits 16–31): " << reg.field1() << "\n";
}
/*
run:
Raw value: 0x0000001a
Field breakdown:
field4 (bits 0–3): 10
field3 (bits 4–7): 1
field2 (bits 8–15): 0
field1 (bits 16–31): 0
*/