C#学习笔记-----C#枚举中的位运算权限分配

时间:2023-03-09 18:14:46
C#学习笔记-----C#枚举中的位运算权限分配

一、基础知识

  1. 什么是位运算?

用二进制来计算,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代表不具有当前位的权限)

C#学习笔记-----C#枚举中的位运算权限分配
 [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
}
C#学习笔记-----C#枚举中的位运算权限分配

动作: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