Macro-Based Register Config Helper

Code

#include <stdio.h>
#include <stdint.h>

// Define macros here

uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
    int val = 0;
    if (enable == 1){
        val = val|(1<<0);
    }
    if (mode == 1){
        val = val|(1<<1);
    }else if(mode == 2){
        val = val|(1<<2);    
    }else if(mode == 3){
        val = val|(1<<1)|(1<<2);
    }
    if (speed == 1){
        val = val|(1<<3);
    }else if(speed == 2){
        val = val|(1<<4);
    }else if(speed == 4){
        val = val|(1<<5);
    }else if(speed == 3){
        val = val|(1<<3)|(1<<4);
    }else if(speed == 5){
        val = val|(1<<3)|(1<<5);
    }else if(speed == 6){
        val = val|(1<<5)|(1<<4);
    }else if(speed == 7){
        val = val|(1<<3)|(1<<4)|(1<<5);
    }
    return val;
}

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;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1 2 4

Expected Output

37