#include int count_bits(unsigned x) { int count = 0; while (x) { if (x & 1U) count++; x >>= 1; } return (count); } int int_bits(void) { return (count_bits(~0U)); } void print_bits(unsigned x) { int i; for (i = int_bits() - 1; i >= 0; i--) putchar(((x >> i) & 1U) ? '1' : '0'); } unsigned lrotate(unsigned x, int n) { int bits = int_bits(); n %= bits; return (n ? (x << n) | (x >> (bits -n)) : x); } unsigned rrotate(unsigned x, int n) { int bits = int_bits(); n %= bits; return (n ? (x >> n) | (x << (bits -n)) : x); } int main(void) { unsigned target; int count, direction; printf("Input plus number:"); scanf("%u", &target); printf("How many bits U want 2 shift:"); scanf("%d", &count); printf("Which U want 2 rotate. Right 0, Left 1:"); scanf("%d", &direction); print_bits(target); putchar('\n'); if (direction) target = lrotate(target, count); else target = rrotate(target, count); print_bits(target); putchar('\n'); return (0); }