#include <stdio.h>

/**
 * Exercise 2-8.  Write a function rightrot(x,n) that returns 
 * the value of the integer x rotated to the right by n bit positions.
 */

void displaybits(unsigned,int);
unsigned getbits(unsigned,int,int);
unsigned rightrot(unsigned,int);

void displaybits(unsigned x, int numbits)
{
   int i;
   for(i=numbits-1; i>=0; i--)
      printf("%d",(x&(1<<i))>0 ? 1 : 0);
   printf("\n");
}

unsigned getbits(unsigned x, int p, int n)
{
   return (x >> (p+1-n)) & ~(~0 << n);
}

unsigned rightrot(unsigned x, int n)
{
   unsigned xbits_upper = getbits(x,31,31-n);
   unsigned xbits_lower = getbits(x,n-1,n);
   return (xbits_lower << 32-n) | xbits_upper;
}

int main(void)
{
   unsigned x = 128482;
   displaybits(x,32);
   displaybits(rightrot(x,5),32);
   return 0;
}
