#include <stdio.h> #include <stdint.h> typedef union { struct { uint16_t adc_value : 12; uint16_t channel : 4; }; uint16_t adc_reg; } ADC_Result; int main() { uint16_t reg; scanf("%hx", ®); // Fill union and print channel and adc_value ADC_Result adc_result; adc_result.adc_reg = reg; uint16_t channel = (adc_result.adc_reg >> 12) & ((1 << 4) - 1); uint16_t adc_value = (adc_result.adc_reg >> 0) & ((1 << 12) - 1); printf("Channel: %u\n", channel); printf("ADC Value: %u", adc_value); return 0; }
Test Cases
Test Results
Input
0xC3F5
Expected Output
Channel: 12 ADC Value: 1013