位操作——循环右移n位
2016-03-21 17:50
162 查看
把一个整数,循环右移n位,输出结果。循环右移的意思是,地位右移后出现在最左边。
例如:1100 0101,循环右移2位后,得到 0111 0001,最高的2bit是'01',就是原来最低2bit。
一个办法是循环来解决;
还有一个直接的办法,把地位n个bit直接挪到高位去。
此外,如果n很大,循环了1轮以上,那么只需要考虑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; }
测试正确。
相关文章推荐
- python系列之 RabbitMQ -- Publish/Subscribe
- springmvc返回jsp界面时出现406错误
- css选择器
- 作业4.1
- 软件测试,想说爱你不容易
- php resizeimage 部分jpg文件 生成缩略图失败
- try...catch...finally
- Poj 2393 Yogurt factory【贪心】
- java 简单gis软件 panel paint
- Traits技术初探
- 精简版android事件分发解释
- Unable to add window崩溃分析
- 隐藏的线程死锁
- Handler使用方法
- mysql查询表和 视图信息
- 史上最全的程序猿求职渠道总结
- jQuery支持移动Mobile的DOM元素移动和缩放插件
- Sys内核驱动签名指南
- retrofit post请求
- UE4的MaterialInstance作用