12. Bit Spreading Interleave Bits with Zeros

Discussions2
Log in to post comments and replies.
You
Loading editor...
KangajanKuganathan
#include <stdio.h>
#include <stdint.h>

uint16_t spread_bits(uint8_t val) {
    // Your logic here
    uint16_t x = val;
    x = (x | (x << 4)) & 0x0f0f; // Step 1: Create 4-zero gaps
    x = (x | (x << 2)) & 0x3333; // Step 2: Create 2-zero gaps
    x = (x | (x << 1)) & 0x5555; // Step 3: Create 1-zero gaps
    return x;
}

int main() {
    uint8_t val;
    scanf("%hhu", &val);

    uint16_t result = spread_bits(val);
    printf("%u", result);
    return 0;
}
0
KangajanKuganathan
#include <stdio.h>
#include <stdint.h>

uint16_t spread_bits(uint8_t val) {
    // Your logic here
    uint16_t result = 0;
    for (int i = 0; i < 8; i++) {
        result |= ((val >> i) & 1) << (2 * i);
    }
    return result;
}

int main() {
    uint8_t val;
    scanf("%hhu", &val);

    uint16_t result = spread_bits(val);
    printf("%u", result);
    return 0;
}
0