C#位运算符的实际应用

blsz114 2012-09-16 08:46:44
求C#位运算符的实际用或是规律,主要是下面这几个

~ 按位求补符;
^ 异或位运算符;
& 且位运算符;
| 或位运算符;
<<左移运算符
>>右移运算符

我知道& 且位运算符的一个应用,就是在权限管理系统中的一个应用

权限系统中,Role为角色,Module为模块,Permission为权限
设各权限值分别如下(2倍等比递增的关系):
1. 列表/查看 = 2
2. 新增 = 4
2. 修改 = 8
4. 删除 = 16
此时的“Role : Module : Permission”中的Permission等于上述四种操作权限中所拥有的权限值之和,比如:若某个(Role + Module)拥有查看、新增、修改、删除的权限,则其Permission=2+4+8+16=30。
下面进行权限检测,判断“(Role + Module)”所对应的Permission是否包含上述四种操作权限中的每一个。解决问题关键:使用“&”运算符。比如:
判断Permission是否包含“查看”的权限值,就用 if((Permission & 2) == 2)
判断Permission是否包含“新增”的权限值,就用 if((Permission & 4) == 4)
判断Permission是否包含“修改”的权限值,就用 if((Permission & 8) == 8)
判断Permission是否包含“删除”的权限值,就用 if((Permission & 16) == 16)

求其它位运算符的实际应用,就是在什么情况下使用,并不是位运算的原理,而是实际的应用,或在应用中的规律,求高手

...全文
652 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyo_zhulin 2012-12-26
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
比如说位运算可以用来比对DNA,可以用来表示颜色,可以用来表示神经网络、可以.......

其实一切信息都可以用“0、1”二进制表示。但是编程设计的关键是知道应用领域本身的逻辑结构,然后我们可以说“我可以把枚举的权限值用bit来表示、我可以把DNA用bit来表示、我可以把神经网络用bit表示”。

实际上你应该尽量使用自然的方式来先学会分析业务逻辑。如果一上来就纠结在bit里,你就没有更大的机会去真正全面、深入地讨论业务逻辑了。

建议lz,趁着你现在还有热情和动力去讨论“bit运算的应用”,暂时忘掉你的bit运算,去多做一些更大技术范围里的业务分析和设计训练。你可以讨论更多算法设计问题,而对过于细节、每个设计人员都有权利对底层结构稍作修改其实可以先放一放。
cheng2005 2012-09-16
  • 打赏
  • 举报
回复
菜刀的100种使用场景
楼主肯定喜欢这种文章.
threenewbee 2012-09-16
  • 打赏
  • 举报
回复
应用很多啊,比如说xor具有如下特性,a xor b = c, c xor b = a,根据这个特性,可以简单地加密解密,假设a是原文,b是密码,加密产生c,解密时根据b和c就能得到a。

代替加减乘除运算,事实上>>和<<可以代替整除2和乘以2的操作,并且速度很快。而+运算可以用and和xor实现。在计算机内部,加法减法其实就是用位运算实现的。

位掩码运算,就是你说的“权限判断”,这是一个特例,它的本质就是让多个bool变量共享一个整数变量,一个整数变量可以共享32个bool,因为有32个位。注意,我们可以延伸下,用一个32bit变量共享出2个16bit短整数,或者4个字节,等等,节省内存空间,并且提高计算速度(往往计算机一次性读取字长单位的数据是最有效率的)。

对上面的再扩展,有时候我们需要用多个变量拼接成一个变量,比如x86电脑是32bit的。我们要做对两个128bit精度的数字的四则运算,我们就要用到位运算——事实上也可以理解为,计算机内部加减乘除原理就是位运算,但是只能处理固定长度的数据类型,如果要超出这个长度,我们就要自己用四则运算规律制作“软CPU”。

变量转换,比如将int转换为short,将int转换为unicode char,将byte[4]转化为double(当然大部分实现已经系统完成了,但是原理你要清楚)。

图形算法,在图形算法中,位运算用得最多,比如说一个32bit整数,非常适合表示一个像素(argb各占一个字节)。我们要将这个颜色加深,取灰度等等,都要用到位运算。

其余还有:数据编码、压缩、索引、搜索遍历、逻辑判断、复杂算法优化(比如做bitmap、index等等)……可以说,位运算是计算机运行的基本原理,并且当你需要处理计算机和你使用的函数库不能直接办到的事情的时候,就必须和这些概念打交道了。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
权限设置为什么要使用位运算?
[/Quote]

因为楼主希望能够沉醉其中、消磨学习的时光。
OObigO 2012-09-16
  • 打赏
  • 举报
回复

权限设置为什么要使用位运算?
内容概要:本文围绕“光伏-储能-数据中心”系统的容量优化配置展开研究,旨在通过构建数学模型并结合Matlab编程实现,对园区内光伏发电、储能设备与数据中心算力负荷之间的多能互补关系进行协同优化。研究综合考虑可再生能源出力的波动性、储能系统的充放电特性以及数据中心的动态用电需求与算力调度特性,建立以最小化综合成本、降低碳排放强度、提升能源自给率等为目标的多目标优化模型,并采用先进的智能优化算法(如粒子群、灰狼、鲸鱼等)进行求解,从而确定光伏装机容量与储能系统配置的最优方案。文中提供了完整的Matlab代码实现流程,涵盖数据预处理、模型构建、算法求解与结果可视化全过程,属于综合能源系统与信息基础设施深度融合的前沿交叉课题。; 适合人群:具备电力系统、能源工程、自动化或计算机等相关专业背景,熟悉Matlab编程与基本优化算法原理,从事新能源利用、绿色数据中心、综合能源系统规划与低碳调度等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握光伏-储能-数据中心耦合系统的建模思路与多能流协同机制;② 学习基于Matlab的多目标容量优化配置方法与智能算法应用技巧;③ 为工业园区、数字经济园区及绿色数据中心的能源系统规划、节能减排与可持续运行提供科学决策依据和技术解决方案。; 阅读建议:建议结合所提供的Matlab代码,深入理解目标函数设计、约束条件设定及算法实现细节,可通过调整负荷参数、改变气候数据、引入新的优化目标或约束条件等方式进行拓展性实验,以深化对系统特性的认知并提升实际科研与工程应用能力。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧