C#枚举中的位运算权限分配浅谈
常用的位运算主要有与(&), 或(|)和非(~), 比如:
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#枚举中的位运算权限分配浅谈相关推荐
- C# 枚举中的位运算
最近用枚举做一个权限控制,在移除某一个权限时一值都得不到解决(离散比较差),网上介绍也少,经过百般搜查,终于找到答案,现多写一份,以后来使用者更易查找. 原文:http://developer.51c ...
- 将不确定变为确定~一切归总为“二”(C#中的位运算有啥用)
回到目录 本文中的"二",指的是二进制,即看见2就进一,也叫逢二进一,它是最为简单和清晰的数据,在现实生活中,人们用的最多的就是十进制数据,即逢十进一,看一下例子: 二进制: 十进 ...
- C语言中的位运算和逻辑运算
位运算 C语言中的位运算包括与(&),或(|),亦或(^),非(~). 下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数). #include<stdio.h> # ...
- 位运算java_Java中的位运算
Java中的位运算,说实话,工作了两年的时间里,从来没有用过一次,因为平时都是些的是业务代码,很少接触比较底层的东西,我记得第一次在代码中看到还是在HashMap的Hash算法中看到的,这次重拾Jav ...
- excel二进制移位运算_Excel揭秘13:在Excel中实现位运算
我们知道,计算机使用的是二进制计数法.也就是说,在计算机中的所有信息都是使用二进制来存储和处理的. 下表列出了我们熟悉的十进制数及与其相对应的二进制数: 位运算规则 在位运算中,"按位与&q ...
- c语言中一些常用的逻辑运算,C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
- HashMap中的位运算
Java 8 中 HashMap 的实现使用了很多位操作来进行优化.本文将详细介绍每种位操作优化的原理及作用. Java 中的位运算 位操作包含:与.或.非.异或 移位操作包含:左移.右移.无符号右移 ...
- Python 中的位运算-基础知识
目录 1.编码基础知识-原码.反码.补码 1.1 原码 1.2 反码 1.3 补码 2.Python 中的位运算 2.1 左移运算符(<<) 2.2 右移运算符(>>) 2.3 ...
- python基础(四)python中的位运算
(一)python中的位运算 位运算即按位(bitwise)运算,python中的位运算符有&.|.^.~.>>.<<.具体的: & 按位与运算符:参与 ...
最新文章
- c语言程序设计教程ppt,《C语言程序设计教程》.ppt
- STM32F103之FLASH组织
- win7讲述人安装包_文件夹选项与讲述人
- [APP]- 找回Xcode7的代码折叠功能
- Win7下硬盘安装Redhat双系统
- 基于JAVA+Swing+MYSQL的在线订餐管理系统
- 2021.5.23 中国高速列车运维技术讲座
- flutter initializing gradle终极解决方案
- Android基础学习整理知识点
- linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
- 从勒索病毒加密的SQLServer数据库中恢复数据
- 大数据有哪些基本特征,有什么作用和用途?
- Ins运营五大技巧总结
- 华为p4支持鸿蒙功能吗_华为P40或用鸿蒙 鸿蒙系统支持哪些手机 鸿蒙系统什么时候能用...
- 女友让我每天半夜十二点给她发晚安?我用 Python 做了个定时发消息神器!怕她干嘛!
- 面上大厂需要准备的面试题
- CSS:三种背景(斑马线,棋盘,格子)
- 爵士之夜(Jazz Night)
- 《数字图像处理》学习总结及感悟:第二章数字图像基础(1)人眼结构、感知和错觉
- 【干货长文】诺亚财富解读市场信息心理学