输入一个八进制数,输入要移动的位数,若数为正数,则表示右移,相反为左移,并打印八进制结果:
思路:这里无符号整数,为两个字节,即16位,用到的公式在代码中体现出来了。
#include <stdio.h>
right(unsigned x, int n)
{
unsigned z;
z = (x>>n)|(x<<16-n);
return z;
}
left(unsigned x, int n)
{
unsigned z;
z = (x>>16-n)|(x<<n);
return z;
}
int main()
{
unsigned a;
int n;
printf("输入一个八进制数: ");
scanf("%o",&a);
printf("输入位移的数:");
scanf("%d",&n);
if(n>0)
{
printf("%#o 右移 %d的数为:%#o",a,n,right(a,n)); //#是按照八进制前面的0标志输出.
}
else{
n = -n;
printf("%#o 左移 %d的数为:%#o",a,n,left(a,n));
}
return 0;
}
例子:
/*0000,0000,0000,0011 3 输入3
0000,0000,0000,0000 0 右移2
1,100,000,000,000,000 0140000 左移16-2 = 14
1,100,000,000,000,000 0140000 将右移值和左移值进行按位或运算
*/