我試圖理解這段用于返回字節數組前綴為多少個零的代碼,但我不確定 0x1 是什么。谷歌搜索沒有幫助,但我假設0x1正在返回第一位?這些叫什么?另外,我知道這是一個單獨的問題,但我不認為它需要一個新線程:我不太明白為什么我們要在這里嵌套循環、位移和從 7 中減去 j。字節是這樣的嗎轉化為二進制?IdLength := 32func PrefixLen(count [IdLength]byte) int { for i := 0; i < IdLength; i++ { for j := 0; j < 8; j++ { if (count[i]>>uint8(7-j))&0x1 != 0 { return i*8 + j } } } return IdLength*8 - 1}
1 回答

忽然笑
TA貢獻1806條經驗 獲得超5個贊
0x1
只是 number 的十六進制表示法1
。你&
用一些整數0x1
來獲得它的最低有效位(最右邊)。當使用位掩碼時,您寫0x1
而不是因為從 16 進制轉換比從 10 進制轉換為 2 進制更容易。1
對于第二個問題,func PrefixLen
做的是找到開頭連續零的個數count
。外層循環每次處理一個字節,內層循環處理不同的位:當 j=0 時,它向右移動 7,從而從左邊移出第一個位,當 j=1 時,它移 6 位,得到第二個位,依此類推在。當遇到一位時,1
它返回已檢查的位數。
- 1 回答
- 0 關注
- 274 瀏覽
添加回答
舉報
0/150
提交
取消