您的位置:首页 > 其它

利用位运算进行循环移位操作

2016-10-22 20:04 169 查看
有时候会用到循环移位的操作,在汇编里面是比较容易实现的,ror,rol指令就行了。有的编译器不支持汇编,或者需要进行设置。

利用位运算进行循环移位操作比较容易理解。如果不是循环移位,使用x<<n(左移n位),x>>n右移n位。

循环移位也容易理解。

比如我们有个1字节的数: x = 10111110。

现在需要对其循环右移4位。也就是最后结果为x = 11101011。

其实思路就是分离数据,我们需要提取出前四位1011,后四位1110。

其实我们需要两个数的或操作,也就是00001011,11100000,我们只要得到这两个数然后让他们就行或操作:

00001011 |
11100000 = 11101011。

把10111110 右移4位变为00001011(x>>4),把10111110左移4位变为11100000(x<<4),注意移位后的“空格”是用0填充的。最后执行或操作。

循环左移和上面的分析是一样的。

假如数据为无符号的数,长度为N,需要循环移动n位。

可以用下面的公式:

循环左移n位: (x>>(N - n) ) | (x<<n);

循环右移n位: (x<<(N - n) ) | (x>>n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: