Pack Multiple Fields into a 16-bit Control Register

Code

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

uint16_t pack_register(uint8_t mode, uint8_t speed, uint8_t status) {
    // Your logic here
    uint16_t num = 0x0;
    for(int i=0;i<15;i++){
        if(i == 0){
            num = num | (mode << i); 
        }
        else if(i == 3){
            num |= (speed << i);
        }
        else if(i == 8 || i == 9){
            num |= (0 << i);
        }
        else if(i == 10){
            num |= (status << i);
        }

    }
    return num;
    
}

int main() {
    uint8_t mode, speed, status;
    scanf("%hhu %hhu %hhu", &mode, &speed, &status);

    uint16_t reg = pack_register(mode, speed, status);
    printf("%u", reg);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

3 10 12

Expected Output

12371