contributed by < hankluo6
>
1
要得到 相當於取得最高位元 0 的位置與 LSB 間的數字數量,所以可以用 binary search 的方法從 16, 8, 4, 2 位元間隔尋找。
15 行後 x
只剩兩個位元,所以需要 (x >> 1)
進行最後一次搜尋,並加上缺少的一次 r |= shift
,可得出 EXP1 = r | shift | (x >> 1)
2
與前一題一樣,從 32, 16, 8, 4, 2 位元去尋找,所以當在搜尋範圍內有位元為 1 時,需要右移 x
並將結果加到回傳值 o
上。所以 EXP2 = s & t
;而回傳值 o
則需加上對應的位元數,故 EXP3 = o += shift
。
3
從結構可以看出 foo_consumer
透過 next
相連,所以 for
迴圈應該為遍歷所有的 foo_consumer
,而這邊使用 pointer to pointer 當作 iterator,所以 EXP4 = con = &(*con)->next
。EXP5
需要將刪除的 foo_consumer
後方的 element 接上,可得出 EXP5 = fc->next
。