#include <stdio.h>
#include <stdint.h>
// Define macros here
uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
// Use macros to set fields
uint16_t reg;
int enable_bit_len;
int mode_bit_len;
int speed_bit_len;
int reserved_bit_len;
enable_bit_len = 1;
mode_bit_len = 2;
speed_bit_len = 3;
reserved_bit_len = 2;
// Set ENABLE bit
if (enable) {
reg |= (1 << 0);
}
// Set MODE field
for (int i=0; i<mode_bit_len; i++) {
if (mode & (1 << i)) {
reg |= (1 << i+enable_bit_len);
} else {
reg &= ~(1 << i+enable_bit_len);
}
}
// Set SPEED field
for (int i=0; i<speed_bit_len; i++) {
if (speed & (1 << i)) {
reg |= (1 << i+enable_bit_len+mode_bit_len);
} else {
reg &= ~(1 << i+enable_bit_len+mode_bit_len);
}
}
// Set RESERVED field
for (int i=0; i<reserved_bit_len; i++) {
reg &= ~(1 << i+enable_bit_len+mode_bit_len+speed_bit_len);
}
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