多状态值存储

2022-08-25  本文已影响0人  JuMinggniMuJ

说明:

代码:
type MySys uint32

func (m *MySys) Add(num uint32) {
    m.checkNUm(num)
    *m |= MySys(num)
}

func (m *MySys) Sub(num uint32) {
    m.checkNUm(num)
    tmp := *m
    if tmp|MySys(num) == tmp {
        *m ^= MySys(num)
    }
}

func (m *MySys) List() (list []uint32){
    tmp , pow := *m , 0
    for tmp > 0{
        if tmp&1 == 1{
            list = append(list,1<<pow)
        }
        tmp>>=1
        pow++
    }
    return
}

func (m *MySys) checkNUm(num uint32) {
    if bits.OnesCount32(num) > 1 {
        panic("Only Support One Byte")
    }
}
使用示例:
func main(){
    var sys models.MySys
    sys.Add(1)
    sys.Add(2)
    sys.Add(4)
    sys.Add(8)
    fmt.Println("设置后的状态值为:",sys)
    sys.Sub(8)
    sys.Sub(1)
    fmt.Println("删除后的状态值为:",sys)
    fmt.Println("状态值列表为:",sys.List())
}

代码截图:

image.png
上一篇 下一篇

猜你喜欢

热点阅读