/* Name: ex20-10.c Purpose: Reverse the bits in a given unsigned integer. Author: Bill Slough Notes: The main() function assumes 32-bit quantities are in use. */ #include #include #define NBITS (8 * sizeof(unsigned int)) unsigned int reverse_bits(unsigned int n); int main(void) { unsigned int x; while (true) { printf("Enter an unsigned integer (in hex): "); scanf("%x", &x); printf("x = %8.8x reversed = %8.8x twice reversed = %8.8x\n", x, reverse_bits(x), reverse_bits(reverse_bits(x))); } return 0; } /* return the bits of n, in reverse order */ unsigned int reverse_bits(unsigned int n) { int i; unsigned int r = 0; for (i = 0; i < NBITS; i++) { r = (r << 1) | (n & 1); /* append the least significant bit of n */ n = n >> 1; } return r; }