Macro-Based Register Config Helper

Code

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

// Định nghĩa vị trí bit cho từng trường trong register 8-bit
typedef enum {
    ENABLE_BIT   = 0,  // bit 0
    MODE_BIT     = 1,  // bits 1–2
    SPEED_BIT    = 3,  // bits 3–5
    RESERVED_BIT = 6   // bit 6; bit 7 mặc định là 0
} StatusBits;

// Hàm tạo register 8-bit từ enable, mode, speed
uint8_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
    uint8_t reg = 0;

    // Dịch giá trị input vào đúng vị trí bit
    reg |= (enable << ENABLE_BIT);
    reg |= (mode   << MODE_BIT);
    reg |= (speed  << SPEED_BIT);

    // Đặt bit reserved = 0
    reg &= ~(1 << RESERVED_BIT  );
    // Bit 7 mặc định = 0 vì reg khởi tạo = 0, không cần thao tác thêm

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

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1 2 4

Expected Output

37