亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我用一些10010或者什么試驗得不出想要的結果,我反復看發現這句我還是無法理解??!

我用一些10010或者什么試驗得不出想要的結果,我反復看發現這句我還是無法理解??!

C
子衿沉夜 2023-04-20 19:15:10
函數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


查看完整回答
反對 回復 2023-04-23
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

是對的啊
getbits(x,4,3)
= x>>2 & 0x7

查看完整回答
反對 回復 2023-04-23
  • 2 回答
  • 0 關注
  • 201 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號