#include <stdio.h>
typedef struct {
union {
unsigned short reg;
struct {
unsigned enable : 1;
unsigned mode : 1;
unsigned priority : 2;
unsigned reserved : 12;
} bits;
};
} ConfigRegister;
int validate_config(ConfigRegister *cfg) {
// Write logic using pointer access
//printf("%d %d %d\n", cfg->bits.enable, cfg->bits.priority, cfg->bits.reserved);
if (cfg->bits.enable != 1)
return 0;
if (cfg->bits.priority == 3)
return 0;
if (cfg->bits.reserved != 0)
return 0;
return 1;
}
int main()
{
ConfigRegister cfg;
scanf("%hx", &cfg.reg);
/*
printf("\ncfg.reg%hX: ", cfg.reg);
printf("enable:%hX ", cfg.bits.enable);
printf("mode:%hX ", cfg.bits.mode);
printf("priority: %hX: ", cfg.bits.priority);
printf("reserved: %hX\n", cfg.bits.reserved);
*/
int result = validate_config(&cfg);
printf("%d", result);
return 0;
}
create a type struct to define the bit fields.
modify configuration register to be a union of the unsigned short and the bit fields for easy identification.
Input
0005
Expected Output
1