函数getbits(x, p, n),它用于返回x从p位置开始的(右对齐的) n位的值。假定第0位是最右边的一位, n与p都是符合情理的正值。例如,getbits(x, 4, 3)返回右对齐的第4、3、2共三位:/* getbits:取从第p位开始的n位*/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,其余各位置为0。 表达式x >> (p+1-n) 将所希望的位段移到字的右边】这句什么意思?
2 回答
哔哔one
TA贡献1854条经验 获得超8个赞
二进制的最低位也就是最右边叫做第零位
原书中写的“从右边数第p位开始向右边n位的字段”容易让人产生误解
但是函数前那段中写的“返回x中第p位开始的n位”是正确的,返回第4,3,2位也是正确
这里以 x = 10 作为举例,运算过程如下 返回x中从右边数第p位开始向右数n位的字段 getbits(10, 4, 3) = 2 10 0000 0000 0000 1010 | >>p 0000 0000 0000 0000 | 1010 >>1 0000 0000 0000 0000 | 0101 0 <<n 0000 0000 0000 0010 | 10 ~0 1111 1111 1111 1111 | <<n 1111 1111 1111 1000 | ~ 0000 0000 0000 0111 | & 0000 0000 0000 0010 -> 2 |
- 2 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消