循环移位分为循环左移和循环右移。
1、循环左移
如图,将x的左端n位先放到z中的低n位中,由语句z>>(32-n)实现,将x左移n位,其右边的低n位补0,由y=x<<n实现,将y与z按位或运算,由语句y=y|z实现
2、循环右移
如图,将x的右端n位先放到z中的高n位中,由语句z<<(32-n)实现,将x左移n位,其右边的高n位补0,由y=x>>n实现,将y与z按位或运算,由语句y=y|z实现
代码:
#include<stdio.h>
move(unsigned value, int n) /*自定义移位函数*/
{
unsigned z;
if(n>0)
{
z = (value >> (32-n)) | (value << n); /*循环左移的实现过程*/
}
else
{
n=-n;
z = (value << (32-n)) | (value >> n); /*循环右移的实现过程*/
}
return z;
}
void main()
{
unsigned a;
int n;
printf("请输入一个八进制数:\n");
scanf("%o", &a); /*输入一个八进制数*/
printf("请输入要移位的位数:\n");
scanf("%d", &n); /*输入要移位的位数*/
printf("移位后的结果是:%o\n", move(a, n)); /*将移位后的结果输出*/
}
执行结果: