转 http://blog.csdn.net/yang_f_k/article/details/8849554
完成循环右移,例如: x = 0x12345678 and w = 32,
n = 4 ,x = 0x81234567, n = 20 ,x = 0x45678123
unsigned rotate_right(unsigned x,int n)
{
int w= sizeof(unsigned)<<3; // w= 32
int out = x & ((1<<n)-1); //保留循环右移的位数
x>>=n;
n && (x|=(out<<(w-n))); //两部分拼起来,注意判断 n = 0的情况。
return x;
}