#include <stdio.h>
#include <stdint.h>
// Define macros here
uint16_t enable_macro(uint8_t enable, uint16_t reg) {
if(enable)
return reg |= 1;
else
return reg &= ~1;
}
uint16_t mode_macro(uint8_t mode, uint16_t reg) {
if(mode)
return reg |= (mode << 1);
else
return reg &= ~(3 << 1);
}
uint16_t speed_macro(uint8_t speed, uint16_t reg) {
if(speed)
return reg |= (speed << 3);
else
return reg &= ~(7 << 3);
}
uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
uint16_t reg = 0;
reg = enable_macro( enable, reg);
reg = mode_macro( mode, reg);
reg = speed_macro( speed, reg);
reg &= ~(3 << 6);
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;
}
Input
1 2 4
Expected Output
37