函數(shù)getbits(x, p, n),它用于返回x從p位置開始的(右對(duì)齊的) n位的值。假定第0位是最右邊的一位, n與p都是符合情理的正值。例如,getbits(x, 4, 3)返回右對(duì)齊的第4、3、2共三位:/* getbits:取從第p位開始的n位*/unsigned getbits(unsigned x, int p, int n){return (x >> (p+1-n) ) & ~(~ 0 << n);}其中的表達(dá)式x >> (p+1-n) 將所希望的位段移到字的右邊。~ 0 將所有位都置為1,~ 0 << n將(~) 0左移n位,將最右邊的n位用0填空。再對(duì)這個(gè)表達(dá)式求反,將最右邊n位置為1,其余各位置為0。 表達(dá)式x >> (p+1-n) 將所希望的位段移到字的右邊】這句什么意思?
2 回答

嗶嗶one
TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
二進(jìn)制的最低位也就是最右邊叫做第零位
原書中寫的“從右邊數(shù)第p位開始向右邊n位的字段”容易讓人產(chǎn)生誤解
但是函數(shù)前那段中寫的“返回x中第p位開始的n位”是正確的,返回第4,3,2位也是正確
這里以 x = 10 作為舉例,運(yùn)算過程如下 返回x中從右邊數(shù)第p位開始向右數(shù)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 關(guān)注
- 199 瀏覽