#include <stdio.h>
#include <stdint.h>
#define POWER_ON_FLAG (1U << 0)
#define ERROR_FLAG (1U << 1)
#define TX_READY_FLAG (1U << 2)
#define RX_READY_FLAG (1U << 3)
#define OVERHEAT_FLAG (1U << 4)
#define UNDERVOLTAGE_FLAG (1U << 5)
#define TIMEOUT_FLAG (1U << 6)
#define RESERVED_FLAG (1U << 7)
#define FLAG_COUNT 8U
struct flag_entry {
uint8_t flag;
const char *name;
};
static const struct flag_entry flags[FLAG_COUNT] = {
{POWER_ON_FLAG, "Power On"},
{ERROR_FLAG, "Error"},
{TX_READY_FLAG, "Tx Ready"},
{RX_READY_FLAG, "Rx Ready"},
{OVERHEAT_FLAG, "Overheat"},
{UNDERVOLTAGE_FLAG, "Undervoltage"},
{TIMEOUT_FLAG, "Timeout"},
{RESERVED_FLAG, "Reserved"}
};
void decode_status(uint8_t status_reg) {
for (unsigned i = 0; i < FLAG_COUNT; i++) {
if (status_reg & flags[i].flag)
printf("%s\n", flags[i].name);
}
}
int main() {
uint8_t reg;
scanf("%hhu", ®);
decode_status(reg);
return 0;
}Solving Approach
Input
13
Expected Output
Power On Tx Ready Rx Ready