利用位运算进行循环移位操作
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)。
利用位运算进行循环移位操作比较容易理解。如果不是循环移位,使用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)。
相关文章推荐
- 利用移位操作进行取余
- JAVA读取XML文件并利用该文件对数据库进行配置操作
- 利用COM+对数据库操作进行单元测试
- 利用System.IO中的Directory类对目录进行基本操作
- 矩阵算法----------利用随机数组的特性来定义矩阵,并进行加、乘、置换的运算
- 二分法的应用----------利用随机类生成数组,并用二分法对数组的元素进行查找以及插入操作
- 转:《Effective C#》Item 11:提倡使用foreach语句来进行循环操作
- 利用System.IO中的Directory类对目录进行基本操作
- 利用Oracle目录对文件进行读写操作
- 利用游标循环进行更新插入的SQL事务语句
- 提倡使用foreach语句来进行循环操作
- 关于利用DataGrid进行数据查询、修改操作
- C#对XML的操作,利用DataSet对XML进行操作。
- 利用线程进行异步操作
- 利用JDOM及XPath对XML文件进行创建、查找、增加、删除、保存等操作
- 利用堆栈方式对grid进行行排序的具体操作
- 《Effective C#》Item 11:提倡使用foreach语句来进行循环操作
- vbscript脚本编程教程2利用fso来进行文件操作
- 《Effective C#》Item 11:提倡使用foreach语句来进行循环操作
- 《Effective C#》Item 11:提倡使用foreach语句来进行循环操作