登录
首页 >  Golang >  Go问答

Golang:如何检测字节的最高位

来源:stackoverflow

时间:2024-02-13 22:00:23 197浏览 收藏

哈喽!今天心血来潮给大家带来了《Golang:如何检测字节的最高位》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习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() 中右移的大小。右移的位数是整数类型的大小(以位为单位)减一(例如,对于 64 位整数,移位值为 64-1 或 63)。

今天关于《Golang:如何检测字节的最高位》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>