实例十二:右循环移位
方法: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;
};