二进制妙用之多选
1. 基础知识
两个运算规则
- 逻辑与,口诀,有0为0
- 逻辑或,口诀,有1为1
使用二进制存取多选信息,应用范围,如存取用户权限,功能权限,方向控制等.需要实现预期的结果,首先需要定权值,权值必须是$2^n$.然后通过逻辑或存储最终拥有的权限,用逻辑与判断是否拥有该权限
举列
2. 确权
定义操作权限
- 添加=2^0,二进制 0001
- 修改=2^1,二进制 0010
- 删除=2^2,二进制 0100
- 查询=2^3,二进制 1000
3. 逻辑或运算存储权限
假设用户a拥有添加和删除权限 (a权限)=2^0 || 2^2=0001 || 0100=0101=5,所以a用户最终权值为5.
假设用户b拥有修改和查询权限 (b权限)=2^1 || 2^3=0010 || 1000=1010=10,所以b用户最终权值为10.
综上就可以在数据库中设计一个number列分别存储a和b的权值5,10;
4. 逻辑与权限判断
在做权限判断时,需要要将权限值挨个同存储权限比较,结果值大于0表示拥有此权限
用户a存储值5,对应二进制 0101
- 添加 0001&0101 =0001=1 > 0 有权限
- 修改 0010&0101 =0000=0 = 0 无权限
- 删除 0100&0101 =0100=4 > 0 有权限
- 查询 1000&0101 =0000=0 = 0 无权限
5. 实例代码
用户b存储值10,对应二进制 1010,感兴趣可自行分析.对应(ts)代码
// author: herbert qq:464884492
// 1. 确权
enum Operation {
ADD = 1<<0,
EDIT = 1<<1,
DEL = 1<<2,
QUERY = 1<<3
}
// 2. 逻辑或,存储值
let a=Operation.ADD || Operation.DEL;
let b=Operation.DEL || Operation.QUERY;
// 3. 逻辑与,判断权限
if(Operation.ADD&a>0){
// do ADD
}
if(Operation.EDIT&a>0){
// do EDIT
}
if(Operation.DEL&a>0){
// do DEL
}
if(Operation.QUERY&a>0){
// do QUERY
}
从确权代码中,附送一个小知识点(移位操作符) 左移一位,相当于 x2.右移一位,相当于 /2.所以 2^0=1<<0 2^1=1<<1 2^2=1<<2 2^3=1<<3.不过,移位虽好,小心溢出哦.
6. 总结
知识虽小,重在积累.2020注定是不平凡的一年.加油!!
欢迎感兴趣的朋友关注我的订阅号“小院不小”,或点击下方二维码关注。我将多年开发中遇到的难点,以及一些有意思的功能,体会都会一一发布到我的订阅号中。
- 转载请注明来源
- 作者:杨瀚博
- QQ:464884492
分类:
javascript
, 前端
标签:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)