如何使用一个属性或字段标识多个状态

65 阅读1分钟

假设有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
}