#include <stdio.h> #include <stdint.h> // Define macros here #define GET_ENABLE(reg) ((reg) & 0x1) #define GET_MODE(reg) (((reg) >> 1) & 0x3) #define GET_SPEED(reg) (((reg) >> 3) & 0x7) uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) { // Use macros to set fields uint16_t reg = 0; // Set ENABLE (1 bit at position 0) reg |= (enable & 0x1) << 0; // Set MODE (2 bits at positions 1–2) reg |= (mode & 0x3) << 1; // Set SPEED (3 bits at positions 3–5) reg |= (speed & 0x7) << 3; return reg; } int main() { uint8_t enable, mode, speed; scanf("%hhu %hhu %hhu", &enable, &mode, &speed); uint16_t reg = build_register(enable, mode, speed); printf("%u", reg); return 0; }
Test Cases
Test Results
Input
1 2 4
Expected Output
37