您的位置:首页 > 其它

位操作——循环右移n位

2016-03-21 17:50 162 查看
把一个整数,循环右移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;
}


测试正确。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: