C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!

但是我按下面的程序得到的结果好像是错的,求助,高分。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。
2.程序源代码:
main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}

移位操作是按二进制算的, 右移 一下相当于除2,左移乘2,说以10进制的不能通过移位实现取位,2,8,16进制的都可以哦。
不过还是有办法,就是用16进制变量存你的10进制变量,然后按16进制移位取位,最后按16进制输出,可达到你想要的效果哦~
我要上课去了,如代码还是写不出来,追问一下,我回来帮你写个
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-11
思路是完全正确的,但不知你的第4~7位是从0开始算还是从1开始算呢
如果最后一位算是右端第1位,那么b = a>>3.
其他都没问题
第2个回答  2012-04-11
%o是八进制输入啊
你用%d 或%x试试,更明显观察测试结果。
第3个回答  2012-04-10
一个可行的方法,仅供参考:
#include <stdio.h>
int main(void)
{
long a;
int b[10],i,j;
scanf("%ld",&a);
for(i=0;a>0;i++)
{
b[i]=a%10;
a=a/10;
}
for(j=1;j<=4;j++)
printf("%d",b[i-j-3]);
getchar();getchar();
}本回答被提问者采纳
相似回答