函数getbits(x,p,n),返回x中从右边数第p位开始向右数n位的字段。
这里假设最右边的一位是第0位,n与p都是合理的正值。
例如getbits(x,4,3)返回x中的第4、3、2三位的值。
下面给出通过位运算的实现方法:
unsigned getbits(unsigned x,int p,int n)
{
return (x>>(p+1-n))&~(~0<<n);
}
其中,表达式x>>(p+1-n)将期望获得的字段移动到字的最右端,~0的所有位都为1,
这里使用语句~0<<n将~0左移n位,并将最右边的n位用0填补。再使用~运算符对它
按位取反,这样就建立了最右边n位全为1的屏蔽码。