Code
#include <stdio.h> #include <stdint.h> #define ENABLE_MASK (1u << 0) #define MODE_MASK (3u << 1) // 2 bits #define SPEED_MASK (7u << 3) // 3 bits #define SET_ENABLE(x) ((x ? ENABLE_MASK : 0)) #define SET_MODE(x) (((x << 1) & MODE_MASK)) #define SET_SPEED(x) (((x << 3) & SPEED_MASK)) uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) { uint16_t reg = 0; reg |= SET_ENABLE(enable); reg |= SET_MODE(mode); reg |= SET_SPEED(speed); return reg; } int main() { uint8_t enable, mode, speed; scanf("%hhu %hhu %hhu", &enable, &mode, &speed); printf("%u", build_register(enable, mode, speed)); }
Test Cases
Test Results
Input
1 2 4
Expected Output
37