首页 > 技术文章 > C#学习笔记-----C#枚举中的位运算权限分配

changrulin 2015-09-12 17:04 原文

一、基础知识

  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代表不具有当前位的权限)

     

复制代码
 [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

                   

推荐阅读