#include <stdio.h>
#include <stdint.h>
// #define SETBITena(val,enable) (((1U) << enable) | val)
#define SET_ENABLE(val, enable) \
((enable) ? ((val) | 1U) : (val))
// #define SETFIELDmode(val,mode) ((val >> 1 & mode) << 1)
#define SET_MODE(val, mode) \
((val) | (((mode) & 0x3U) << 1))
#define SET_SPEED(val, speed) \
((val) | (((speed) & 0x7U) << 3))
// #define SETSPEEDmode(val,speed) ((val >> 2 & speed) << 2)
// Define macros here
// uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
// // Use macros to set fields
// uint16_t Reg = 0;
// Reg = SETBITena(Reg,enable);
// Reg = SETFIELDmode(Reg,mode);
// Reg = SETSPEEDmode(Reg,speed);
// return Reg;
// }
uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed)
{
uint16_t Reg = 0;
Reg = SET_ENABLE(Reg, enable);
Reg = SET_MODE(Reg, mode);
Reg = SET_SPEED(Reg, speed);
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