博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 枚举中的位运算
阅读量:6970 次
发布时间:2019-06-27

本文共 1070 字,大约阅读时间需要 3 分钟。

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

原文:

 

  • 本文介绍C#位运算的处理方法,第一步, 先建立一个枚举表示所有的权限管理操作,接下来是权限的运算等。

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

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

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

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

[Flags]

public enum Permissions

{    

    Insert = 1,   

    Delete = 2,   

    Update = 4,   

    Query = 8

}  

 

[Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用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/Yjianyong/archive/2010/05/27/1745695.html

你可能感兴趣的文章
out对象
查看>>
Windows Azure 安全最佳实践 - 第 6 部分:Azure 服务如何扩展应用程序安全性
查看>>
50% 的财富 500 强企业使用 Windows Azure
查看>>
手机号码归属地查询免费api接口代码
查看>>
java8新特性使用
查看>>
“VS无法连接远程数据库”解决方案
查看>>
mysql查询查询条件越多速度越快_mysql优化(一)判断什么时候加索引
查看>>
php 下拉源码,PHP采集百度下拉框数据的脚本程序源码
查看>>
linux 删除 html文件,如何在 Linux 上恢复误删除的文件或目录
查看>>
linux qt默认编码方式是什么,QT编码方式
查看>>
c++线程中更新ui_大比拼 | 下一代高性能跨平台UI渲染引擎
查看>>
asp.net gridview 为什么只显示一行数据_针对mysql,数据库干货分享,值得收藏
查看>>
r 选取从小到大的数据_收藏|零基础学R之数据结构,一个学习R的理由足够
查看>>
向量图 正弦交流电路_立体几何大题——向量法(二面角)专题
查看>>
处于停机等非正常状态_工地停工,停机很久之后的挖掘机,重启前要检查什么...
查看>>
创建前缀一样的文件_8 个文件整理高级技巧,让你效率倍增
查看>>
mysql 配置程序_4 MySQL程序概述(包含mysql配置文件配置原理)-学习笔记
查看>>
ubuntu jdbc mysql_Ubuntu jsp平台使用JDBC来连接MySQL数据库
查看>>
qt 嵌入cmd窗口_MIL+QT实践教程三
查看>>
mysql的连接路径_Mysql 连接路径 url 参数解析
查看>>