#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; }
Test Cases
Test Results
Input
0005
Expected Output
1