Pack Multiple Fields into a 16-bit Control Register

Code

// Your task is to:
// Read mode, speed, and status from input
// Pack them into a uint16_t register following the given bit layout
// Ensure reserved bits (8–9) remain 0
// Print the resulting packed value

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

uint16_t packing_register(uint8_t mode, uint8_t speed, uint8_t status){
    uint16_t reg = 0; 
    reg = reg | mode; 
    reg = reg | (speed << 3); 
    reg = reg | ((uint16_t)status << 10); 
    return reg; 
}

int main(){
    uint8_t mode, speed, status; 
    scanf("%hhu %hhu %hhu", &mode, &speed, &status); 
    uint16_t reg = packing_register(mode, speed, status); 
    printf("%u",reg); 
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

3 10 12

Expected Output

12371