Bit Reversal in an 8-bit Value

Code

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

uint8_t reverse_bits(uint8_t val) {
    // 1. Swap adjacent 4-bit blocks (nibbles)
    // (val & 0xF0) >> 4 moves high to low; (val & 0x0F) << 4 moves low to high
    val = ((val & 0xF0) >> 4) | ((val & 0x0F) << 4);

    // 2. Swap adjacent 2-bit blocks
    // 0xCC is 11001100, 0x33 is 00110011
    val = ((val & 0xCC) >> 2) | ((val & 0x33) << 2);

    // 3. Swap adjacent single bits
    // 0xAA is 10101010, 0x55 is 01010101
    val = ((val & 0xAA) >> 1) | ((val & 0x55) << 1);

    return val;
}

int main() {
    uint8_t val;
    // Use %hhu to read an unsigned char (8-bit integer)
    if (scanf("%hhu", &val) != 1) return 1;

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

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

26

Expected Output

88