例12.2
循环移位。要求将a进行右循环移位。见图12.4。图12.4表示将a右循环移n位。即将a中原来左面(16-n)位右移n位,原来右端n位移到最左面n位。今假设用两个字节存放一个整数。为实现以上目的可以用以下步骤:
① 将a的右端n位先放到b中的高n位中。可以用下面语句实现:b=a<<(16-n);
② 将a右移n位,其左面高位n位补0。可以用下面语句实现:
c=a>>n;
③ 将c与b进行按位或运算。即
c=c|b;
程序如下:
main( )
{unsigned a,b,c;
int n;
scanf("a=%o,n=%d",&a,&n);
b=a<<(16-n);
c=a>>n;
c=c|b;
printf("%o\n%o",a,c);
}
运行情况如下:
a=157653,n=3
0 157653
75765
运行开始时输入八进制数157653,即二进制数1101111110101011,循环右移3位后得二进制数0111101111110101,即八进制数75765。同样可以左循环位移。
循环移位。要求将a进行右循环移位。见图12.4。图12.4表示将a右循环移n位。即将a中原来左面(16-n)位右移n位,原来右端n位移到最左面n位。今假设用两个字节存放一个整数。为实现以上目的可以用以下步骤:
① 将a的右端n位先放到b中的高n位中。可以用下面语句实现:b=a<<(16-n);
② 将a右移n位,其左面高位n位补0。可以用下面语句实现:
c=a>>n;
③ 将c与b进行按位或运算。即
c=c|b;
程序如下:
main( )
{unsigned a,b,c;
int n;
scanf("a=%o,n=%d",&a,&n);
b=a<<(16-n);
c=a>>n;
c=c|b;
printf("%o\n%o",a,c);
}
运行情况如下:
a=157653,n=3
0 157653
75765
运行开始时输入八进制数157653,即二进制数1101111110101011,循环右移3位后得二进制数0111101111110101,即八进制数75765。同样可以左循环位移。