方法1:
unsigned rotate_right(unsigned x, int n)
{
int mask = ~(0 - (1 << n - 1) - (1 << n -1));
mask &= x;
int w = sizeof(unsigned) << 3;
mask <<= w - n;
x >>= n;
return x | mask;
}
方法2:
unsigned rotate_right(unsigned x, int n)
{
unsigned nbit = sizeof(unsigned) << 3;
unsigned tail = x >> n;
/**
avoid to left shift `nbit' bits.
**/
unsigned head = x << (nbit - n - 1);
head += head;
return head ^ tail;
}