getbits(x,p,n)返回从右边第p位开始向右数n位的字段,例如getbits(x,4,3)返回x中第4、3、2位字段。
unsigned getbits(unsigned x,int p,int n){
return (x >> (p=1-n)) & ~ (~0 << n);
}
注解:假设x = 0011 0000 p = 4 n = 3 数据采用大端存储(即最右边是第0位)
①、x >> (p=1-n)表示将x左移,使希望获得的字段位于x的最右端,即 x = 0000 1100
②、~0 << n表示左移n位,右边用0来补位,即 1111 1000
③、~ (~0 << n)表示取反,即 0000 0111
最后进行按位与运算,即 0000 1100 & 0000 0111 得结果 0000 0100,则返回字段是100,符合要求。