我用一些10010或者什么试验得不出想要的结果,我反复看发现这句我还是无法理解啊!

函数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) 将所希望的位段移到字的右边】这句什么意思?

子衿沉夜
浏览 167回答 2
2回答

哔哔one

二进制的最低位也就是最右边叫做第零位原书中写的“从右边数第p位开始向右边n位的字段”容易让人产生误解但是函数前那段中写的“返回x中第p位开始的n位”是正确的,返回第4,3,2位也是正确这里以&nbsp;x&nbsp;=&nbsp;10&nbsp;作为举例,运算过程如下返回x中从右边数第p位开始向右数n位的字段getbits(10,&nbsp;4,&nbsp;3)&nbsp;=&nbsp;2&nbsp;10&nbsp;&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;1010&nbsp;|&nbsp;>>p&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;|&nbsp;1010>>1&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;|&nbsp;0101&nbsp;0<<n&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0010&nbsp;|&nbsp;10&nbsp;~0&nbsp;&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;|<<n&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1000&nbsp;|~&nbsp;&nbsp;&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0111&nbsp;|&nbsp;&&nbsp;&nbsp;&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0010&nbsp;->&nbsp;2

桃花长相依

是对的啊getbits(x,4,3)= x>>2 & 0x7
打开App,查看更多内容
随时随地看视频慕课网APP