我是一个编程新手,如果我在提出这个问题时犯了一些错误,我很抱歉。
我正在学习的教程涉及到以下代码:
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)
}
教程中的这位男士迅速提到了这个部分被称为位掩码。
fmt.Printf ("Is Admin? %v\n", isAdmin & roles == isAdmin)
据我所了解,这里发生的过程大致如下:
电脑被询问是否同时具有isAdmin和roles等于isAdmin,并回答true。
但是,当我尝试做到这一点时:
fmt.Printf ("Is Admin? %v\n", roles == isAdmin)
结果为false。
有人能否更详细地讲解这个过程的整个逻辑?这一部分让我有些困惑,我想知道为什么会发生这种情况。谢谢。
&
是按位与, 而&&
则是逻辑与。你所描述的应该是isAdmin == isAdmin && roles == isAdmin
(这并没有太多意义)。链接的维基百科页面详细介绍了位掩码。请仔细阅读。 - Marc