C++实现循环移位
1.循环移位
1.1 大循环
- 带进位标志位CF的循环移位
【鬼知道啥是进位标志位】
1.2 小循环
- 不带进位标志位CF的循环移位
1.3 案例分析
下面直接给出一个例子,介绍如何通过循环移位的方法,将一个正整数的高低位字节互换。
给出一个unsigned short
【实测用int
型变量存储也是没有问题的,】类型(占2B)的整数,将其高8位与低8位互换,并输出互换后的数。例如:25(十进制) = 0000 0000 0001 1001;
互换后得到6400 = 0001 1001 0000 0000 = 212 + 211 + 28。那么该如何用程序实现呢?就以循环左移k位为例。计算机的实现需要两个步骤:
- step 1.将正整数a先左移k位
- step 2.再将正整数a右移n-k位(n是正整数共占的位数)
- step 3.将上述两步得到的数进行与操作,便得到了最后的结果。
代码实现如下:
typedef unsigned short us;
int main(){
int n = sizeof(us) * 8;//n表示该数二进制所占的位数
int k;//循环左移k位
cin >>k;
us a = 25;//0
us a1 = a << k;//先左移k位
us a2 = a >> (n-k);//再右移n-k 位才能得到左移k位溢出的 高k位
cout <<"a = "<< a<<"\n";//a值不变
cout <<"a1 = "<<a1<<"\n";
cout <<"a2 = "<<a2<<"\n";
us res = a1 | a2;//将a1 与 a2异或,便得到了循环移k位的结果
cout << res<<"\n";
}