位操作——循环右移n位

来源:互联网 发布:飘逸传世登录器源码 编辑:程序博客网 时间:2024/06/11 13:59

把一个整数,循环右移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;}


测试正确。

0 0
原创粉丝点击