#include <stdio.h> #include <stdint.h> // Macros to set fields in 16-bit register #define SET_ENABLE(reg, val) ((reg) |= ((val & 0x1) << 0)) #define SET_MODE(reg, val) ((reg) |= ((val & 0x3) << 1)) #define SET_SPEED(reg, val) ((reg) |= ((val & 0x7) << 3)) int main() { uint16_t reg = 0; uint8_t enable, mode, speed; scanf("%hhu %hhu %hhu", &enable, &mode, &speed); SET_ENABLE(reg, enable); SET_MODE(reg, mode); SET_SPEED(reg, speed); // RESERVED bits (6-7) remain 0 printf("%u\n", reg); // Print final 16-bit register value in decimal return 0; }
Test Cases
Test Results
Input
1 2 4
Expected Output
37