Compress Interleaved Bits Reverse Bit Spreading

Code

#include <stdio.h>
#include <stdint.h>

uint8_t compress_bits(uint16_t val) {
    // first, let’s clear the odd bits
	val &= 0x5555;
	
	// bit 0 stays, bit 2 << 1, bit 4 << 2 to bit 2, bit 6 << 3 to bit 3, bit 8 << 4 to bit 4 …
	
	// extract bit, shift left
	uint8_t byte = 0;
	for (int i = 0; i < 8; i++)
    {
        uint16_t bit_to_shift = 1 << (i * 2);
	    byte |= ((val & bit_to_shift) >> i);
    }
    return byte;
}

int main() {
    uint16_t val;
    scanf("%hu", &val);

    uint8_t result = compress_bits(val);
    printf("%u", result);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

20548

Expected Output

202