把一个整数,循环右移n位,输出结果。循环右移的意思是,地位右移后出现在最左边。
例如:1100 0101,循环右移2位后,得到 0111 0001,最高的2bit是'01',就是原来最低2bit。
一个办法是循环来解决;
还有一个直接的办法,把地位n个bit直接挪到高位去。
此外,如果n很大,循环了1轮以上,那么只需要考虑n相对于位宽的余数。
unsigned int rotate_bits(unsigned int x, unsigned int n)
{
unsigned int nsize = 8*sizeof(x); //字节数要乘以8,才是位宽
n = n%nsize; //取余数就行了
unsigned int c = ~((~0)<<(nsize-n));
unsigned int b = (~((~0)<<n)&x)<<(nsize-n);
unsigned int a = x>>(n);
unsigned int r = b|(a&c);
return r;
}