golang:如何获得字节的第一个位



我有一个散列:

b := hash.Sum(nil)

我真的只对字节的第一个比特感兴趣。是0还是1?

到目前为止,我有这个:

s := strconv.FormatInt(int64(b[0]),2)
if s[0] == '0' {
// it's 0
} else {
// it's 1
}

但是我确信有一种更优雅(和性能更好?)的方法来做到这一点。

你可以只检查位和运算符

的结果
if b[0] & 0x1 == 0x1 {
// it's 1
} else {
// it's 0
}

哈希的Sum()函数返回一个字节片。你想要隔离第一个字节的第一个位,对吗?

这是一个简单的小问题。最多2或3条机器指令。

根据你所说的"第一个位"的意思,

给你一个字节的高阶/最高有效位/最左位:

func HighOrderBit(b byte) byte {
return (b >> 7) & 0x01
}

这给了你一个字节的低阶/最低有效位/最右位:

func LowOrderBit(b byte) byte {
return (b >> 0) & 0x01
}

请注意,上述操作适用于任何整数类型:唯一的区别是highOrderBit()中右移的大小。右移的位数是整型的大小减1(例如,对于64位整数,移位值为64-1,即63)。

相关内容

  • 没有找到相关文章

最新更新