#include const int intsize = sizeof(int) * 8; /* # of bits for an integer value */ void bit_print(int v); main() { int i, n, lbit, rbit; unsigned lmask = 1 << (intsize - 1), rmask = 1; /* if lmask and rmask are delclared as (signed) int then a right shift operation will perform signed arithmetic shift */ printf("\nInput an integer value: "); scanf("%d", &n); printf("\n Input value in binary: "); bit_print(n); for(i = 0; i < (intsize/2); ++i) { lbit = n & lmask; rbit = n & rmask; n = (lbit) ? (n | rmask) : (n & ~rmask); n = (rbit) ? (n | lmask) : (n & ~lmask); lmask >>= 1; /* performs traditional shift */ /* left most vacant bit is filled with zero */ rmask <<= 1; } printf("\n Reversed binary value: "); bit_print(n); } void bit_print(int v) { int i, mask = 1 << (intsize - 1); /* mask = 100 ... 0 */ for(i = 1; i <= intsize; ++i) { putchar(((v & mask) == 0) ? '0' : '1'); v <<= 1; if ((i % 8) == 0) putchar(' '); } putchar('\n'); }