#include <stdio.h> #include <stdint.h> uint8_t reverse_bits(uint8_t val) { // reverse nibbles val = ((val & 0xF0) >> 4) | ((val & 0x0F) << 4); // reverse 2 bits val = ((val & 0xCC) >> 2) | ((val & 0x33) << 2); // reverse individual bits val = ((val & 0xAA) >> 1) | ((val & 0x55) << 1); return val; } int main() { uint8_t val; scanf("%hhu", &val); uint8_t result = reverse_bits(val); printf("%u", result); return 0; } /* i = 0001 1010 o = 0101 1000 swap nibbles (4 bytes) (mask = 0xF0 for left nibble and 0x0F for right nibble) 1010 0001 swap 2 bits (mask = 0b1100 1100 (0xCC) for left sides and 0b0011 0011 (0x33) for right sides) 1010 0100 swap 1 bits (mask = 0b1010 1010 (0xAA) for left sides and 0b0101 0101 (0x55) for right sides) 0101 1000 */
Test Cases
Test Results
Input
26
Expected Output
88