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));
}
Input
1 2 4
Expected Output
37