枚举位预算 (适用于权限和拥有多种枚举值)

一、基础知识

  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

时间: 2024-12-13 21:20:56

枚举位预算 (适用于权限和拥有多种枚举值)的相关文章

利用位运算进行权限管理

原理 在Linux文件系统中,一个用户对文件或目录所拥有的权限分为三种:”可读”.”可写”和”可执行”,分别用 1 .2 和 4 来表示,它们之间可以任意组合:有“可读”.“可写”权限就用 3 来表示(1 + 2 = 3):有”可读“.”可执行“权限就用5来表示(1 + 4 = 5),三种权限全部拥有就用 7 表示(1 + 2 + 4 = 7). 实际上,这种运算是基于二进制的. 假设可执行.可写.可读三种权限分别对应三个状态位,如果用户具有某种权限,那么将对应的状态位标识为“1”,反之则标识为

Objective-C使用位运算设计可复选的枚举

使用位运算设计可复选的枚举 一.枚举使用的一个小例子 在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性.通常情况下,我们会通过typedef来定义一种枚举的类型来使用.例如: typedef enum {     para1,     para2,     para3 }myEnum; 我们可以在函数的参数中来使用它: -(void)testEunm:(myEnum)para{     switch (para) {         case pa

使用位运算进行权限控制

使用位运算进行权限控制非常普遍. 如: 0000 表示初始化, 0001 表示新增, 0010 表示编辑, 0100 表示更新, 1000 表示查询...... 使用2的次方表示各个权限值 当给用户赋权限时采用按位或运算 | 如 赋查询,新增权限 : 0000 | 1000 | 0001 = 10001,最后把各个权限进行或运算之后的值存在用户的权限值authority里面. 当判断用户是否有某个操作的权限则使用按位与运算 & ,如判断是否有新增权限:authority & 0001 ;

C#枚举总结和其扩展用法(通过枚举描设置枚举值)

C#中枚举是一个非常好用的类型,用会了之后确实方便了很多. 项目中一个枚举类型: public enum Version_Type : byte { [Description("1997版")] 版本1997 = 0 , [Description("2007版")] 版本2007 } 枚举类型的默认类型是int型,可以改变其使用的类型,需要用(: <type>)来进行设置,上例中<type>为byte,也可以用其它类型(byte,sbyte,

[C#]枚举操作(从枚举中获取Description,根据Description获取枚举,将枚举转换为ArrayList)工具类

关键代码: using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; namespace CSharpUtilHelpV2 { /// <summary> /// 基于.NET 2.0的枚举工具类 /// </summary> public static class EnumToolV2

枚举类:用enum关键字来定义一个枚举类

1)枚举类的两种定义方法 1>通过构造器 public enum Grade{ A("A", "90-100"),B("B","80-89"),C("C", "70-79"),D("D", "80-89"),E("E", "90-100"); private String tip; private St

尝试封装适用于权限管理的通用API

谈谈我对权限系统的简单理解 最近一段时间在研究权限系统,在园子里看到个很牛逼的开源的基于DDD-Lite的权限管理系统,并有幸加入了作者的QQ群,呵呵,受到了很大的影响.对于权限管理我有我自己的一些简单想法,说简单也许是因为我对权限管理领域的理解有限,我所做的仅是基于我本人对权限管理的理解.以最终目的为出发点,应该就是一个系统根据不同的登陆用户的不同权限而呈现不同的界面,不同的操作,数据和资源等等.从实现方面大体可以分几个部分:用户登陆管理部分,用户权限分配部分,响应终端或界面部分.目前我已经根

POJ 2436 二进制枚举+位运算

题意:给出n头牛的得病的种类情况,一共有m种病,要求找出最多有K种病的牛的数目: 思路:二进制枚举(得病处为1,否则为0,比如得了2 1两种病,代号就是011(十进制就是3)),首先枚举出1的个数等于k的二进制数,然后跟所有的牛的代号一一比较,符合的           +1,找出其中和最大的:就是转换2进制麻烦,用位运算就好实现了,但是位运算不是很明白含义,明白了再补充: 知识点: 3 & 2 = 2,相同为1,不同为0, 011 & 010 = 010:(怎么利用的这个特点不明白):

URAL 1500. Pass Licenses 枚举+位运算

1500. Pass Licenses Time limit: 2.5 second Memory limit: 64 MB A New Russian Kolyan believes that to spend his time in traffic jams is below his dignity. This is why he had put an emergency flashlight upon the roof of his Hummer and had no problems u