常用的位运算主要有与(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理.

第一步, 先建立一个枚举表示所有的权限管理操作:

public enum Permissions

{

Insert = 1,

Delete = 2,

Update = 4,

Query = 8

}

枚举的每一项值, 我们用2的n次方来赋值, 这样表示成二进制时刚好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一种权限, 1表示有该权限, 0表示没有.

接下来是权限的运算:

1. 权限的加法, 使用或运算来实现. 我们知道, 0001 | 0100 = 0101, 这样就表示同时具有第一位和第三位的权限管理了, 枚举表示为:

Permissions per = Permissions.Insert | Permissions.Update

2. 权限的减法, 使用与运算+非运算来实现, 如上面要去掉Insert权限, 操作为:

Permissions per &= ~Permissions.Insert即是 0101 & ~0001 = 0101 & 1110 = 0100

3. 权限的判断, 使用与运算, 当判断用一用户是否具有该操作权限时, 要把用户的的权限与操作权限进行与运算, 如果得到的结果仍是操作权限管理, 则表示用户具有该权限:

Permissions per = Permissions.Insert | Permissions.Update;

if(per & PermissionsPermissions.Insert = Permissions.Insert)

{

//有操作权限

}

比较过程为 0101 & 0001 = 0001, 0001的0位用与C#位运算把其它位都置成0, 变成只比较1的这一位.

转载于:https://www.cnblogs.com/yy1234/p/9585349.html

C#枚举中的位运算权限分配浅谈相关推荐

  1. C# 枚举中的位运算

    最近用枚举做一个权限控制,在移除某一个权限时一值都得不到解决(离散比较差),网上介绍也少,经过百般搜查,终于找到答案,现多写一份,以后来使用者更易查找. 原文:http://developer.51c ...

  2. 将不确定变为确定~一切归总为“二”(C#中的位运算有啥用)

    回到目录 本文中的"二",指的是二进制,即看见2就进一,也叫逢二进一,它是最为简单和清晰的数据,在现实生活中,人们用的最多的就是十进制数据,即逢十进一,看一下例子: 二进制: 十进 ...

  3. C语言中的位运算和逻辑运算

    位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...

  4. 位运算java_Java中的位运算

    Java中的位运算,说实话,工作了两年的时间里,从来没有用过一次,因为平时都是些的是业务代码,很少接触比较底层的东西,我记得第一次在代码中看到还是在HashMap的Hash算法中看到的,这次重拾Jav ...

  5. excel二进制移位运算_Excel揭秘13:在Excel中实现位运算

    我们知道,计算机使用的是二进制计数法.也就是说,在计算机中的所有信息都是使用二进制来存储和处理的. 下表列出了我们熟悉的十进制数及与其相对应的二进制数: 位运算规则 在位运算中,"按位与&q ...

  6. c语言中一些常用的逻辑运算,C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  7. HashMap中的位运算

    Java 8 中 HashMap 的实现使用了很多位操作来进行优化.本文将详细介绍每种位操作优化的原理及作用. Java 中的位运算 位操作包含:与.或.非.异或 移位操作包含:左移.右移.无符号右移 ...

  8. Python 中的位运算-基础知识

    目录 1.编码基础知识-原码.反码.补码 1.1 原码 1.2 反码 1.3 补码 2.Python 中的位运算 2.1 左移运算符(<<) 2.2 右移运算符(>>) 2.3 ...

  9. python基础(四)python中的位运算

    (一)python中的位运算   位运算即按位(bitwise)运算,python中的位运算符有&.|.^.~.>>.<<.具体的:   & 按位与运算符:参与 ...

最新文章

  1. c语言程序设计教程ppt,《C语言程序设计教程》.ppt
  2. STM32F103之FLASH组织
  3. win7讲述人安装包_文件夹选项与讲述人
  4. [APP]- 找回Xcode7的代码折叠功能
  5. Win7下硬盘安装Redhat双系统
  6. 基于JAVA+Swing+MYSQL的在线订餐管理系统
  7. 2021.5.23 中国高速列车运维技术讲座
  8. flutter initializing gradle终极解决方案
  9. Android基础学习整理知识点
  10. linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
  11. 从勒索病毒加密的SQLServer数据库中恢复数据
  12. 大数据有哪些基本特征,有什么作用和用途?
  13. Ins运营五大技巧总结
  14. 华为p4支持鸿蒙功能吗_华为P40或用鸿蒙 鸿蒙系统支持哪些手机 鸿蒙系统什么时候能用...
  15. 女友让我每天半夜十二点给她发晚安?我用 Python 做了个定时发消息神器!怕她干嘛!
  16. 面上大厂需要准备的面试题
  17. CSS:三种背景(斑马线,棋盘,格子)
  18. 爵士之夜(Jazz Night)
  19. 《数字图像处理》学习总结及感悟:第二章数字图像基础(1)人眼结构、感知和错觉
  20. 【干货长文】诺亚财富解读市场信息心理学

热门文章

  1. python的一些常用操作
  2. 10分钟部署一个数据中心
  3. DevExpress 控件使用之GridControl基本属性设置
  4. 新鲜的jquery插件收集
  5. 【数据挖掘笔记一】引论
  6. (转载)为什么Linux不需要碎片整理?
  7. Win10下skimage的安装
  8. printf 指针地址_c语言入门 第十四章指针
  9. java 方法泛型_Java基础学习,什么是泛型概念,使用泛型有哪些好处?
  10. Explore Optimization