#include <stdio.h>
#include <stdint.h>
#define extractbit(val,pos) ((val)>>(pos) & (1U))
#define assignbit(val,pos,ass) (ass? (val|=(1U << pos)) : (val &= ~(1U << (pos))))
#define clearbit(val, pos) (val &= ~(1U << (pos)))
// #define SET_BIT(x, y) (x |= (1U << (y)))
// #define CLEAR_BIT(x, y) (x &= ~(1U << (y)))
// uint16_t spread_bits(uint8_t val) {
// // Your logic here
// uint16_t Val = (uint16_t) 0;
// uint8_t storage[8];
// for (int j=0;j<8;j++){
// storage[j] = extractbit(val,j);
// }
// int i = 0;
// int k=0;
// while (i<=15){
// // uint8_t bit = extractbit(Val,i);
// // Val = clearbit(Val,i);
// Val = assignbit(Val,i,storage(k));
// i = i+2;
// k++;
// }
// return Val;
// }
uint16_t spread_bits(uint8_t val)
{
uint16_t Val = 0;
uint8_t storage[8];
// 1. Extract bits
for (int j = 0; j < 8; j++) {
storage[j] = extractbit(val, j);
}
// 2. Assign bits to even positions
int i = 0; // destination bit index
int k = 0; // source bit index
while (k < 8) {
assignbit(Val, i, storage[k]);
i += 2;
k++;
}
return Val;
}
int main() {
uint8_t val;
scanf("%hhu", &val);
uint16_t result = spread_bits(val);
printf("%u", result);
return 0;
}
Input
202
Expected Output
20548