C语言什么是循环移位?
一、问题
左移位是将⼆进制位的数据向左移动,移动位数由移位运算符右侧的⼗进制整数决定。向右移位与向左移位相似,只是⽅向不同。那什么是循环移位?
二、解答
循环移位就是在移位的过程中,不丢失移位前原操作数的位,⽽是将移出的⼆进制位数据写⼊需要补位的位置。循环移位的结果如下所示。
下⾯举例说明循环移位的过程。例如,要求将⼗六进制数 a 进⾏左循环移位。为实现循环左移,有如下算法步骤。
(1)将 a 的左端 n 位先放到 b 中的低 n 位。可以⽤如下语句实现。
b=a>>(16-n);
(2)将 a 左移 n 位,其左⾯低 n 位补 0 。可以⽤如下语句实现。
c=a<<n;
(3)将c与b进⾏按位或运算。即:
c=c|b;
这样就实现了循环左移。循环右移可以采⽤同样的思想。
说明:
在进⾏移位运算时,采⽤⼗六进制数更能清晰地观察出变化。
⽤⼗六进制数实现循环左移的实例程序如下。
mian()
{
unsigned a, b, c, n, z;
scanf("a=%x,n=%d", &a, &n);
b = a >> (16 - n);
printf("b=%x\n", b);
c = a << n;
printf("c=%x\n", c);
z = c | b;
printf("z=%x\n%x\n", a, z);
}
程序运⾏结果如下所示。
a=0001,n=3
b=0
c=8
1
8
三、总结
在循环移位的算法步骤中,重要的是要理解(3)的或运算,按位或运算可以使得到的 z 保持 b 的⾼位和 c 的低位均不变。
原文地址:https://blog.csdn.net/W_Fe5/article/details/139016770
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!