#include <stdio.h>
#include <stdint.h>
unsigned int reg = 0b0000000000000000;
#define enable_bit_pos 0
#define enable_bit_len 1
#define mode_bit_pos 1
#define mode_bit_len 2
#define speed_bit_pos 3
#define speed_bit_len 3
#define set_fields(reg, pos , len , value)\
reg = reg & ~((((1<<len)-1)<<(1<<pos))) | ((((value) & (1<<len)-1)<<pos))
// Define macros here
uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
set_fields(reg, enable_bit_pos , enable_bit_len , enable);
set_fields(reg,mode_bit_pos,mode_bit_len,mode);
set_fields(reg,speed_bit_pos,speed_bit_len,speed);
// Use macros to set fields
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