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"; 
	
}

C++实现循环移位_c