![]() ![]() ![]() |
|
|
|
2008/10/04 07:58:26瀏覽2039|回應4|推薦4 | |
#include #include #define MAX 12 #define TBLSZE 0x100 #define uchar unsigned char #define ulong unsigned long static uchar rev_tbl[TBLSZE]; static uchar rev(uchar u) { uchar ur = 0, u2 = u, bit; for (bit = 0; bit < 8; (u2 & 1)? (ur |= 1 << (7 - bit)):0, bit++, u2 >>= 1); return (ur); } int main(void) { uchar in[MAX], i; ulong num, u, mun; // Construct the static table if (rev_tbl[0] == '\0') { for (u = 0; u < TBLSZE; rev_tbl[u] = rev((uchar)u), u++); } // Prompt for user entry printf("Enter a number in hexadecimal(0x~ or 0X~), " "octal(0~), or decimal: "); // Process user input if (fgets(in, MAX, stdin)) { num = strtoul(in, NULL, 0); // This one statement completes the reversal for (i = 0, mun = 0, u = num; i < 4; (mun |= rev_tbl[(uchar)(u & 0xff)] << ((3 - i) * 8)), i++, u >>= 8); // Display the header banner printf(" hex dec oct bin\n"); // Show the original number printf("reversal of number 0x%08x %-10u 0%-011o ", num, num, num); for (i = 0; i < 32; (num & (1 << (31 - i)))? printf("1"):printf("0"), i++); // Print the reversed number printf("\nis 0x%08x %-10u 0%-011o ", mun, mun, mun); for (i = 0; i < 32; (mun & (1 << (31 - i)))? printf("1"):printf("0"), i++); } } |
|
( 知識學習|科學百科 ) |