#include <stdio.h>
#include <stdint.h>
#define SETBIT(VARIABLE,POSITION) VARIABLE |= (1 << POSITION)
#define CLEARBIT(VARIABLE,POSITION) VARIABLE &= ~(1 << POSITION)
#define TOGGLEBIT(VARIABLE,POSITION) VARIABLE ^= (1 << POSITION)
// Define macros here
uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed)
{
// Use macros to set fields
uint16_t result = 0x00;
uint8_t Enable_mask = 0x01;
uint8_t Mode_mask = 0x03;
uint8_t Speed_mask = 0x07;
uint8_t result1 = 0x00;
if((Enable_mask & enable) != 0)
{
SETBIT(result,0);
}
if((Mode_mask & mode) != 0)
{
result1 = Mode_mask & mode;
result |= (result1 << 1);
}
if((Speed_mask & speed) != 0)
{
result1 = Speed_mask & speed;
result |= (result1 << 3);
}
//printf("%d ",result);
return result;
}
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