一、基础知识
- 什么是位运算?
用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算 得到的结果是 0011,也就是3
2.位预算有多少种?(我们就将几种我们权限中会用到的)
& 与运算 1&0=0 1&1=1 0&0=0
| 或运算 1|1=1 1|0=1 0|0=0
~ 非运算 ~1=0 ~0=1
二、如何与权限关联
1、逻辑是什么?
其实逻辑很简单,我们将每一位表示一种权限或一种枚举,1010(1代表具有当前位的权限;0代表不具有当前位的权限)
[FlagsAttribute] public enum Category { [Description("动作")] Motion = 1, [Description("喜剧")] Comedy = 2, [Description("爱情")] Love = 4, [Description("科幻")] Science = 8, [Description("奇幻")] Queer = 16, [Description("灾难")] Calamity = 32, [Description("恐怖")] Dracula = 64, [Description("纪录")] Documentary = 128, [Description("犯罪")] Crime = 256, [Description("战争")] War = 512, [Description("冒险")] Adventure = 1024, [Description("动画")] Cartoon = 2048, [Description("剧情")] Feature = 4096, [Description("其他")] Other = 8192 }
动作:0001 喜剧:0010 依次类推,每个枚举值必须是2的n次方
2、如何做运算?
叠加: 如果一部电影的类型即是 动作,也是喜剧
var category= Category.Motion|Category.Comedy =0011(3)
减法:如果要将这部电影,去掉喜剧类型
category&= ~Category.Comedy
0011&=~0010 0011&=1101 0001(动作)
判断:判断一部电影是否是动作片
(category& Category.Motion)==Category.Motion