右循环移位

实例十二:右循环移位


方法:result=n>>k|n<<(32-k)


(1) b:将n的右端的k位先放到b中的高位中。
        b=n<<(32-k);
(2) c:将n右移k位,其左边高位k位补0。
     c=n>>k;
(3) 将b和c进行或操作.

 

简化例子:
  x=n<<4    x保存n左移4位后的数
  y=n>>4    y保存n右移4位后的数
  result=x|y   x和y进行与操作

即把数的8位,前4位与后4位进行交换。


解释:
原数        0101 0011
左移4位       0011 0000 ---x
原数右移4位     0000 0101 ---y
x|y ---x和y进行与操作
结果        0011 0101

 

int _tmain(int argc, _TCHAR* argv[])
{
  int n,k,b,c,nResult = 0;

  cout << "请输入原始的值:";
  cin >> n;
  cout << "请输入左移的位:";
  cin>>k;

  b = n<<(32-k) ;     // 将原始数据的低位移动到b的高位中
  c=n>>k;        //把原始数据进行右移
  nResult = b|c;     //或运算,把从前的低位放到移动后的高位中

  cout << endl <<"结果:"<< nResult;

  system("pause");
  return 0;
};

posted @ 2017-03-28 16:50  gd_沐辰  阅读(385)  评论(0编辑  收藏  举报