我試圖理解這段用于返回字節(jié)數(shù)組前綴為多少個(gè)零的代碼,但我不確定 0x1 是什么。谷歌搜索沒(méi)有幫助,但我假設(shè)0x1正在返回第一位?這些叫什么?另外,我知道這是一個(gè)單獨(dú)的問(wèn)題,但我不認(rèn)為它需要一個(gè)新線(xiàn)程:我不太明白為什么我們要在這里嵌套循環(huán)、位移和從 7 中減去 j。字節(jié)是這樣的嗎轉(zhuǎn)化為二進(jìn)制?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貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
0x1
只是 number 的十六進(jìn)制表示法1
。你&
用一些整數(shù)0x1
來(lái)獲得它的最低有效位(最右邊)。當(dāng)使用位掩碼時(shí),您寫(xiě)0x1
而不是因?yàn)閺?16 進(jìn)制轉(zhuǎn)換比從 10 進(jìn)制轉(zhuǎn)換為 2 進(jìn)制更容易。1
對(duì)于第二個(gè)問(wèn)題,func PrefixLen
做的是找到開(kāi)頭連續(xù)零的個(gè)數(shù)count
。外層循環(huán)每次處理一個(gè)字節(jié),內(nèi)層循環(huán)處理不同的位:當(dāng) j=0 時(shí),它向右移動(dòng) 7,從而從左邊移出第一個(gè)位,當(dāng) j=1 時(shí),它移 6 位,得到第二個(gè)位,依此類(lèi)推在。當(dāng)遇到一位時(shí),1
它返回已檢查的位數(shù)。
- 1 回答
- 0 關(guān)注
- 286 瀏覽
添加回答
舉報(bào)
0/150
提交
取消