假設我有兩個變量,即只使用6位:Golang中如何計算字節中有多少位字節?
var a byte = 31 // 00011111
var b byte = 50 // 00110010
第一(a
)有多個的一個比特比b
,然而b
大於a
當然所以不可能使用a > b
。
爲了實現我需要什麼,我做一個循環:
func countOneBits(byt byte) int {
var counter int
var divider byte
for divider = 32; divider >= 1; divider >>= 1 {
if byt & divider == divider {
counter++
}
}
return counter
}
This works,我可以使用countOneBits(a) > countOneBits(b)
...
但我不認爲這是我們的最佳解決方案情況,我不認爲這需要一個循環,因爲它我在這裏。
有更好的選擇(在性能方面)來計算有多少1
有六位?
轉到1.9(以2017年八月公佈 - 預發行是沒有可用的)將推出https://beta.golang.org/pkg/math/位/#OnesCount和其他位操作功能。正如我們可以從[documentation](https://beta.golang.org/doc/go1.9#math-bits)中看到的那樣,它將根據架構進行優化。 –