#include <stdio.h> #include <stdint.h> // Define macros here #define ENABLE_SHIFT 0 #define MODE_SHIFT 1 #define SPEED_SHIFT 3 #define ENABLE_MASK 0x1 #define MODE_MASK 0x3 #define SPEED_MASK 0x7 #define SET_ENABLE(val) ( ((val) & ENABLE_MASK) << ENABLE_SHIFT ) #define SET_MODE(val) ( ((val) & MODE_MASK) << MODE_SHIFT ) #define SET_SPEED(val) ( ((val) & SPEED_MASK) << SPEED_SHIFT ) uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) { uint16_t result = 0; result |= SET_ENABLE(enable); result |= SET_MODE(mode); result |= SET_SPEED(speed); return result; } 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