在位操作中,经常需要使用循环移位,然而 C# 貌似没有提供循环移位的函数或方法。当我们需要使用循环移位时,我们必须自己定义一个函数或方法来实现循环移位。这里以 64 位的数据循环移位为例,给出了一种可行的代码。代码经测试可以对占 8 个字节的Int64 类型的整数进行左右循环移位,不足之处是不能对任意类型的数据进行循环移位(使用函数重载的方式感觉太麻烦),大神若有解决方法还望赐教。
函数的参数分别为:
ref Int64 str ,表示要移位的Int64的整型数,这里添加了 ref 是为了使传入的值能够被改变;
int i,表示要移动的位数;
bool isLeft=true,确定是左移还是右移,缺省值为 true,即左移。
private void cycleShift(ref Int64 str,int i,bool isLeft=true) //循环移位,长度为 64 位 { Int64 temp = 0; // 64 位整型数 temp |= str; //临时存储str的值 if (isLeft) //向左移位 { str <<= i; //输入数据向左移动 i 位 temp >>= (64 - i); //temp 向右移动 64 - i 位 str |= temp; //将两个移位后的变量合并 } else { str >>= i; //输入数据向左移动 i 位 temp <<= (64 - i); //temp 向右移动 64 - i 位 str |= temp; //将两个移位后的变量合并 } }
时间: 2024-12-29 21:38:31