美文网首页
多状态值存储

多状态值存储

作者: JuMinggniMuJ | 来源:发表于2022-08-25 09:07 被阅读0次

说明:

  • 适用于少于32个状态值枚举值的多状态值存储
  • 状态值设定为2的指数次值,如[1,2,4,8,16,32,64....]
代码:
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

相关文章

  • 多状态值存储

    说明: 适用于少于32个状态值枚举值的多状态值存储 状态值设定为2的指数次值,如[1,2,4,8,16,32,64...

  • 开发 Intellij 插件时(如AndroidStudio 插

    开发 Intellij 插件时,有时需要存储一些状态值,方便做一些 UI 上的偏好设置。 比如自己最近开发的一个 ...

  • Ajax状态值及状态码

    Ajax状态值及状态码 1- AJAX状态值与状态码区别AJAX状态值是指,运行AJAX所经历过的几种状态,无论访...

  • SwiftUI Modal Alert

    记录一个状态值,操作触发状态值的改变进而引发弹出动作 Modal .sheet(isPresented: >, ...

  • 利用共用体union、位域存储Bool状态值

    一、利用位域技术存储Bool状态值的方式可以有效的减少内存。 1)位域在结构体中的实践 定义一个匿名结构体,结构体...

  • Ajax

    在网页上获取请求的方式获取 状态值readystate 传送门:状态值 状态码status Access-Cont...

  • SqlServer Case when then用法总结

    数据库存储的角色和状态值 1-超级管理员 2-普通管理员 3-普通用户0-禁用 1-启用 核心代码

  • AJAX状态值与状态码

    今天收集了一下相关ajax状态值和状态码资料的收集。 状态值于状态码: ajax状态码: ajax类库

  • ajax状态值和状态码

    AJAX状态值和状态码的区别 ajax的状态值是指,运行ajax所经历过的几种状态,无论访问是否成功都将响应步骤,...

  • case和when同时使用的注意点

    当某个对象,有多种状态值,且在不同状态值时需要执行不同的操作;这时我们要用到case和when。 当用case和w...

网友评论

      本文标题:多状态值存储

      本文链接:https://www.haomeiwen.com/subject/awrtnrtx.html