码迷,mamicode.com
首页 > Windows程序 > 详细

C#实现循环移位

时间:2015-12-02 20:39:58      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

  在位操作中,经常需要使用循环移位,然而 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;                //将两个移位后的变量合并
            }
        }

 

C#实现循环移位

标签:

原文地址:http://www.cnblogs.com/robothy/p/5014048.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!