#include <stdio.h>
#define INVALID_PR (0x11)
#define BIT_EN 0
#define BIT_MOD 1
#define BIT_PR 2
#define BIT_RSV 4
#define MSK_EN (1 << BIT_EN)
#define MSK_MOD (1 << BIT_MOD)
#define MSK_PR ((1 << (BIT_PR + 1)) | (1 << BIT_PR))
#define MSK_RSV (~(MSK_EN | MSK_MOD | MSK_PR))
typedef struct {
unsigned short reg;
} ConfigRegister;
int validate_config(ConfigRegister *cfg) {
if ( cfg->reg & MSK_EN &&
(cfg->reg & MSK_PR) >> BIT_PR != INVALID_PR &&
(cfg->reg & MSK_RSV) >> BIT_RSV == 0 )
return 1;
return 0;
}
int main() {
ConfigRegister cfg;
scanf("%hx", &cfg.reg);
int result = validate_config(&cfg);
printf("%d", result);
return 0;
}
Input
0005
Expected Output
1