假设我有两个变量,即只使用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)中看到的那样,它将根据架构进行优化。 –