假设有n个状态:
package main
import "fmt"
// n个状态的值
const(
a = 1<<iota
b
c
d
e
f
g
h
i
j
k
l
m
n
)
func main() {
// 属性或状态变量:st
var st int
// 设置状态, 位运算符:按位或
st |= b // 给st设置状态b
st |= n // 给st设置状态n
st |= g // 给st设置状态g
// 判断状态,位运算符:按位与
fmt.Println(st&m) // st是否包含状态m,打印0
fmt.Println(st&n) // st是否包含状态n,打印8192
fmt.Println(st&b) // st是否包含状态b,打印2
// 清除状态,位运算符:按位与非
st &^= g // 清除st的状态g
// 判断状态是否同时存在
ck := b|g
fmt.Println(st&ck==ck) // st是否同时包含状态b和g,打印false
ck = b|n
fmt.Println(st&ck==ck) // st是否同时包含状态b和n,打印true
}