登录
首页 >  Golang >  Go问答

为什么在 golang 中使用按位 AND 进行比较?

来源:stackoverflow

时间:2024-04-19 16:42:28 119浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《为什么在 golang 中使用按位 AND 进行比较?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我正在阅读这样的一段代码(取自 fsnotify):

type Op uint32

    const (
        Create Op = 1 << iota
        Write
        Remove
        Rename
        Chmod
    )

    ...

    func (op Op) String() string {

    var buffer bytes.Buffer

    if op&Create == Create {
        buffer.WriteString("|CREATE")
    }
    if op&Remove == Remove {
        buffer.WriteString("|REMOVE")
    }
    if op&Write == Write {
        buffer.WriteString("|WRITE")
    }
    if op&Rename == Rename {
        buffer.WriteString("|RENAME")
    }
    if op&Chmod == Chmod {
        buffer.WriteString("|CHMOD")
    }
    if buffer.Len() == 0 {
        return ""
    }
    return buffer.String()[1:] 
}

我的新手问题是为什么有人会使用像 op&remove == remove 这样的按位 and 运算来实际进行比较。 为什么不直接比较操作和(创建|删除|...)值?


解决方案


这是 bit masking 的示例。他们正在做的是定义一系列掩码(创建、删除、写入),这些掩码是整数 1、2、4、8、16、32 等。您传入一个操作值,该操作值可以有多个操作,它会根据翻转的位来确定要执行哪个操作。如果您以按位模式思考这些数字,这就更有意义了。 4 == 00000100,删除的值。如果您传入操作码 6,则当您比较 00000110 && 00000100 == 00000100 时,您会得到 true,因为特定于“Remove”的位(第三个最低有效位)是 1。

用一种不太行话和具体的方式来说,这基本上是一种用一个字节传递多个操作码的方法。他们进行按位与然后比较的原因是因为它允许他们检查特定位是否被翻转,而忽略其余位。

以上就是《为什么在 golang 中使用按位 AND 进行比较?》的详细内容,更多关于的资料请关注golang学习网公众号!

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