Bit Spreading Interleave Bits with Zeros

Code

#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;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

202

Expected Output

20548