新手关于移位的问题请教。
我用vc 6.0写了一个从16位的单元中取出某几位组成一个新数,求这个新数的值的程序。程序执行的时候出现问题。例如 我输入一个八进制的56,从第13位开始第15位结束,00000000 00101 110 这个取出来的值应该是111. 我想请问的是下面注释语句的问题。为什么赋值之后value变大了一倍?main()
{
int getbits(unsigned value,int n1,int n2);
unsigned int a;
int s,end;
scanf("%o",&a);
printf("请输入取出字符的起始位置:\n");
scanf("%d",&s);
printf("请输入取出字符的结束位置:\n");
scanf("%d",&end);
printf("the result is[%d]:%d, [%o]:%o",getbits(a,s,end),getbits(a,s,end));
}
int getbits(unsigned int value,int n1,int n2)
{
value=value>>(16-n2); //??为什么value>>(16-n2)的值为23 但是赋值给value之后 value就变成46?? 这个是什么原因,应该怎么改?
value=~(~0<<(n2-n1+1))&value;
return value;
}