【发布时间】:2021-10-05 02:27:25
【问题描述】:
我是一般编程的初学者,所以如果我在提出这个问题时犯了一些错误,我很抱歉。
我正在关注的教程介绍了这段代码:
package main
import (
"fmt"
)
const (
isAdmin = 1 << iota
isHeadquarters
canSeeFinancials
canSeeAfrica
canSeeAsia
canSeeEurope
canSeeNorthAmerica
canSeeSouthAmerica
)
func main() {
var roles byte = isAdmin | canSeeFinancials | canSeeEurope
fmt.Printf ("%b\n", roles)
fmt.Printf ("Is Admin? %v\n", isAdmin & roles == isAdmin)
}
教程中的人很快提到了这部分是如何称为Bitmasking的。
fmt.Printf ("Is Admin? %v\n", isAdmin & roles == isAdmin)
现在,据我了解,这里发生的过程是这样的: 计算机被询问 isAdmin 和 roles 是否等于 isAdmin 并回复 true。
但是,当我尝试这样做时:
fmt.Printf ("Is Admin? %v\n", roles == isAdmin)
它会导致 false。
有人可以更详细地了解这个过程背后的整个逻辑吗?这一点让我有点困惑,我想知道为什么会这样。谢谢。
【问题讨论】:
-
&是 bitwise AND,而&&是逻辑与。您所描述的是isAdmin == isAdmin && roles == isAdmin(这没有多大意义)。链接的维基百科页面详细介绍了位掩码。请仔细阅读。
标签: go bitwise-operators boolean-logic bitmask