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)

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

...全文
524 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
  • 打赏
  • 举报
回复

权限设置为什么要使用位运算?
中文名: Visual C# 2008从入门到精通 作者: 崔群法 资源格式: PDF 版本: 扫描版 出版社: 电子工业出版社书号: 9787121083662发行时间: 2009年04月01日 地区: 大陆 语言: 简体中文 简介: 编辑推荐 本书可作为Visual C#2008初学者的入门教程,更适用于具有一定C#编程基础的读者。通过本书的学习,读者可以迅速提高基于Visual C#2008开发Windows应用程序的实际开发技能。    本书的特点包括:本书内容安排详略得当、章节条理清楚、层次分明、讲解详细严谨。   本书注重理论与实践结合,对于每种技术要点都结合实例详细介绍,使读者能够轻松掌握。   本书紧紧围绕Visual C#2008开发展开讲解,具有很强的逻辑性和系统性。   内容新颖,涵盖了大部分Visual C#2008的新特性。   技术全面、实例丰富、效果实有。   书中各实例均经过精心设计,操作步骤清晰简明,技术分析深入浅出,实例效果精美实用。 内容简介 .NET已经成为Microsoft的支撑战略技术,Microsoft的很多产品现在都围绕.NET而展开。而C#是.NET的核心——.NET框架的“母语”,因此使用C#能够有效地开发基于.NET的应用程序。   本书以最新的.NET 3.5和Visual C# 2008为基础循序渐进地介绍了从入门到深入掌握Visual C# 2008所需的各个方面,包括开发环境的配置、C#语法、Windows应用程序开发、处理文件和注册表,创建基于Web的应用程序以及.NET 3.5的新增特性等。   本书同时还介绍了大量Visual C# 2008的开发经验,对使用中的重点、难点进行了专门的讲解,是一本有效、实用的从入门到精通级的学习指南。   本书适合于学习Visual C# 2008技术的初、中级读者使用,如果是初学者,本书将带你顺利进入Visual C# 2008开发领域,如果已有Visual C# 2008技术基础,本书将是你提高开发技能和更新开发理念的必备工具。 目录: 第一篇 入门必备、 第1章 .NET Framework和C#简介 1.1 .NET Framework与C# 1.1.1 C#概述 1.1.2 .NET Frameworlk 3.5概述 1.1.3 公共语言运行时(CLR) 1.1.4 .NET Framework类库 1.1.5 程序集 1.1.6 命名空间 1.2 部署.NET Framework环境 1.2.1 Visual Studio 2008简介 1.2.2 安装ViSUal Smdio 2008 1.2.3 了解Visual Studio 2008工作环境 1.3 创建第一个C#程序 1.4 C#命令行编译器 1.4.1 命令行生成 1.4.2 设置环境变量和帮助 1.4.3 C#编译器选项 1.4.4 编译C#类库 第2章 C#基础语法 2.1 C#语法 2.1.1 变量 2.1.2 常量 2.1.3 注释 2.1.4 C#预处理器指令 2.2 控制语句 2.2.1 选择语句 2.2.2 循环语句 2.2.3 跳转语句 2.3 预定义数据类型 2.3.1 值类型和引用类型 2.3.2 CTS类型 2.4 控制台程序 2.4.1 Main()方法 2.4.2 WriteLine()方法 2.5 C#3.5语言功能 2.5.1 隐含类型化的局部变量 2.5.2 扩展方法 2.5.3 对象与集合初始化器 2.5.4 匿名类型 2.5.5 Lanlbda表达式 2.5.6 自动属性 第3章 运算符和类型强制转换 3.1 运算符 3.1.1 赋值运算符 3.1.2 算术运算符 3.1.3 条件运算符 3.1.4 简化运算符 3.1.5 checked和unclaecked运算符 3.1.6 关系运算符 3.1.7 sizeo运算符和typeoiFj运算符 3.1.8 可空类型和运算符 3.1.9 空接合运算符 3.1.10 运算符的优先级 3.2 类型的安全性 3.2.1 类型转换 3.2.2 装箱和拆箱 3.3 对象的相等比较 3.3.1 引用类型的相等比较 3.3.2 值类型的相等比较 3.4 运算符重载 3.4.1 运算符的工作方式 3.4.2 运算符重载的示例:Vector结构 3.5 用户定义的数据类型转换 3.5.1 执行用户定义的类型转换 3.5.2 多重数据类型转换 第4章 C#面向对象编程 4.1 类和对象 4.1.1 面向对象概述 4.1.2 类的基本概念 4.2 类成员 4.2.1 数据成员 4.2.2 定义方法 4.2.3 定义属性 …… 第二篇 编程基础 第5章 数组和集合 第6章 字符串和正则表达式 第7章 结构化异常处理 第8章 委托与事件 第三篇 高级课题 第9章 Windows窗体 第10章 处理XML 第11章 文件和注册表操作 第12章 .NET数据访问 第13章 查的睦.NET数据 第14章 与SQL Server2008交互 第15章 基于.NET Framework编程 第四篇 Web开发 第16章 构建ASP.NET Web应用程序 第17章 ASP.NET应用 第五篇 使用.NET Framework3.5 第18章 .NET Framework3.5组 第19章 LINQ介绍
是源码 图书简介: C# 是一种先进的、面向对象的语言,使用C# 语言可以让开发人员快速地建立大范围的基于MS网络平台的应用,并且提供大量的开发工具和服务,帮助开发人员开发基于计算和通信的各种应用。 本书精选了10个C# 开发案例,分别是员工管理信息系统、房屋出租管理系统、仓库管理信息系统、研究生管理信息系统、图书馆管理信息系统、宿舍管理信息系统、理财管理信息系统、IT设备资产管理系统、俄罗斯方块游戏的编制和贪吃蛇游戏的编制。 本书内容详实、语言简练、思路清晰、图文并茂、理论与实际设计相结合,适合作为高等院校计算机、自动化、机械、电子等相关专业学生课程设计的指导书,也适合作为开发人员的参考用书。          目 录    第1章 C#?基础知识 1 1.1 Visual Studio.NET 1 1.1.1 什么是.NET 1 1.1.2 .NET结构 1 1.2 基本C# 2 1.2.1 什么是C# 2 1.2.2 C#?代码结构 2 1.2.3 C#注释 3 1.2.4 标识符与关键字 4 1.3 C# 基本类型 5 1.3.1 值类型 6 1.3.2 引用类型 8 1.3.3 类型转换 13 1.4 变量和常量 15 1.4.1 变量的定义 15 1.4.2 变量的命名 15 1.4.3 变量的类型 16 1.4.4 常量 17 1.5 运算符与表达式 17 1.5.1 运算符分类 17 1.5.2 算术运算符 18 1.5.3 关系运算符 19 1.5.4 赋值运算符 21 1.5.5 逻辑运算符 21 1.5.6 位运算符 22 1.5.7 其他运算符 24 1.5.8 运算符优先级和结合性 25 第2章 C#?程序设计 27 2.1 C#?控制台应用程序 27 2.1.1 创建工程 27 2.1.2 修改代码 28 2.1.3 运行程序 29 2.2 C# Windows应用程序 30 2.2.1 新建工程 30 2.2.2 添加新的窗口 31 2.2.3 添加菜单 32 2.3 SQL入门 33 2.3.1 SQL简介 33 2.3.2 SQL的优点 33 2.3.3 从服务器资源管理器 连接数据库 34 2.4 连接数据库 36 2.4.1 .NET中的Connection对象 36 2.4.2 C#?连接Access 36 2.4.3 C#?连接SQL Server 37 2.4.4 C#?连接Oracle 38 2.4.5 C#?连接MySQL 39 第3章 俄罗斯方块游戏的编制 41 3.1 程序概述 41 3.1.1 游戏的功能 41 3.1.2 游戏的预览 41 3.2 游戏的概要设计 42 3.2.1 游戏实现方案 42 3.2.2 游戏逻辑设计 43 3.3 游戏的详细设计及编码 43 3.3.1 主界面设计编码 43 3.3.2 游戏控制设置设计编码 50 3.3.3 游戏方块设计编码 52 3.3.4 游戏声音设计编码 66 3.4 本章小结 66 第4章 贪吃蛇游戏的编制 67 4.1 程序概述 67 4.1.1 游戏的功能 67 4.1.2 游戏的预览 67 4.2 游戏的概要设计 68 4.2.1 游戏实现方案 68 4.2.2 游戏逻辑设计 68 4.3 游戏的详细设计及编码 68 4.3.1 主界面设计编码 68 4.3.2 游戏颜色设置设计编码 73 4.3.3 游戏蛇设计编码 76 4.4 本章小结 79 第5章 员工管理信息系统 80 5.1 系统概述 80 5.1.1 系统功能与应用背景 80 5.1.2 系统预览 80 5.2 系统设计 82 5.2.1 系统设计思想 82 5.2.2 系统结构设计 82 5.2.3 系统功能模块划分 83 5.3 数据库设计 83 5.3.1 数据库需求分析 83 5.3.2 数据库概念结构设计 84 5.3.3 数据库逻辑结构设计 85 5.3.4 设置表与表之间的关系 86 5.4 工种种类设置 87 5.4.1 添加工种种类 87 5.4.2 浏览工种种类 88 5.4.3 修改工种种类 89 5.4.4 删除工种种类 91 5.5 员工个人信息管理 92 5.5.1 添加员工信息 92 5.5.2 浏览员工信息 94 5.5.3 修改员工信息 95 5.5.4 删除员工信息 97 5.6 员工所属部门信息管理 98 5.6.1 添加部门信息 98 5.6.2 浏览部门信息 99 5.6.3 修改部门信息 100 5.6.4 删除部门信息 101 5.7 员工月收入信息管理 102 5.7.1 添加员工月收入信息 102 5.7.2 浏览员工月收入信息 103 5.7.3 修改员工月收入信息 105 5.7.4 删除员工月收入信息 106 5.8 本章小结 107 第6章 房屋出租管理系统 108 6.1 系统概述 108 6.1.1 系统的应用背景 108 6.1.2 系统的功能 108 6.1.3 系统的预览 108 6.2 系统概要设计 112 6.2.1 系统实现方案和系统 模块划分 112 6.2.2 数据库逻辑设计 114 6.3 系统详细设计 118 6.3.1 数据库连接 118 6.3.2 出租人信息管理 118 6.3.3 房屋信息管理 119 6.3.4 房屋查询 120 6.3.5 承租者入住管理 121 6.3.6 承租者查询 121 6.3.7 利润信息 122 6.4 系统编制 122 6.4.1 主界面编码 122 6.4.2 出租人信息管理部分编码 132 6.4.3 房屋信息管理部分编码 136 6.4.4 房屋查询部分编码 138 6.4.5 承租者入住部分编码 141 6.4.6 承租者查询部分编码 142 6.4.7 利润信息部分编码 143 6.5 本章小结 144 第7章 仓库管理信息系统 145 7.1 系统概述 145 7.1.1 系统功能与应用背景 145 7.1.2 系统预览 146 7.2 系统设计 146 7.2.1 系统设计思想 146 7.2.2 系统功能模块设计 146 7.2.3 数据库设计 148 7.3 登录界面与用户模块设计 150 7.3.1 登录界面设计 150 7.3.2 用户模块设计 151 7.3.3 系统模块设计 152 7.4 物资信息管理 154 7.4.1 添加物资信息 154 7.4.2 浏览物资信息 156 7.4.3 修改物资信息 157 7.4.4 查询物资信息 159 7.5 入库信息管理 160 7.5.1 添加入库信息 160 7.5.2 浏览入库信息 162 7.5.3 修改入库信息 163 7.5.4 查询入库信息 165 7.6 出库信息管理 166 7.6.1 添加出库信息 166 7.6.2 浏览出库信息 168 7.6.3 修改出库信息 170 7.6.4 查询出库信息 171 7.7 库存信息管理 173 7.7.1 浏览库存信息 173 7.7.2 查询库存信息 174 7.8 本章小结 175 第8章 研究生管理信息系统 176 8.1 系统概述 176 8.1.1 系统功能 176 8.1.2 系统预览 176 8.2 系统概要设计 177 8.2.1 功能模块设计 177 8.2.2 文件架构设计 178 8.2.3 数据库设计 179 8.3 系统详细设计 182 8.3.1 数据库连接 182 8.3.2 主界面 182 8.3.3 系统管理 183 8.3.4 专业管理 184 8.3.5 课程管理 185 8.3.6 研究生管理 186 8.3.7 成绩管理 188 8.3.8 用户管理 189 8.4 系统程序设计 190 8.4.1 登录界面编码 190 8.4.2 主界面编码 191 8.4.3 系统管理编码 194 8.4.4 专业管理编码 196 8.4.5 课程管理编码 199 8.4.6 研究生管理编码 203 8.4.7 成绩管理编码 204 8.4.8 用户管理编码 207 8.5 本章小结 208 第9章 图书馆管理信息系统 209 9.1 系统概述 209 9.1.1 系统功能 209 9.1.2 系统预览 210 9.2 系统概要设计 211 9.2.1 系统设计思想 211 9.2.2 功能模块设计 212 9.3 数据库设计 213 9.3.1 数据库概念设计 213 9.3.2 数据库逻辑设计 214 9.3.3 数据库表之间的关系 216 9.4 系统详细设计 216 9.4.1 数据库连接 216 9.4.2 系统管理设计 217 9.4.3 图书管理设计 218 9.4.4 读者管理设计 221 9.4.5 借还管理设计 223 9.4.6 查询管理设计 225 9.4.7 用户管理设计 227 9.5 系统程序设计 228 9.5.1 登录界面编码 228 9.5.2 主界面编码 230 9.5.3 系统管理编码 233 9.5.4 图书管理编码 235 9.5.5 读者管理编码 237 9.5.6 借还管理编码 238 9.5.7 查询管理编码 242 9.5.8 用户管理编码 244 9.6 本章小结 245 第10章 宿舍管理信息系统 246 10.1 系统概述 246 10.1.1 系统功能 246 10.1.2 系统预览 246 10.2 系统概要设计 247 10.2.1 系统设计思想 247 10.2.2 功能模块设计 248 10.2.3 数据库设计 249 10.3 系统详细设计 251 10.3.1 数据库连接 251 10.3.2 系统管理设计 252 10.3.3 宿舍管理设计 253 10.3.4 学生管理设计 255 10.3.5 卫生检查设计 256 10.3.6 水电收费设计 258 10.3.7 房屋报修设计 259 10.3.8 外来人员登记设计 260 10.4 系统程序设计 262 10.4.1 登录界面编码 262 10.4.2 主界面编码 263 10.4.3 系统管理编码 269 10.4.4 宿舍管理编码 270 10.4.5 学生管理编码 274 10.4.6 卫生检查编码 277 10.4.7 水电收费编码 277 10.4.8 房屋报修编码 278 10.4.9 外来人员登记编码 278 10.5 本章小结 278 第11章 理财管理信息系统 279 11.1 系统概述 279 11.1.1 系统功能 279 11.1.2 系统预览 280 11.2 系统概要设计 280 11.2.1 系统设计思想 280 11.2.2 功能模块设计 280 11.2.3 数据库设计 281 11.3 系统详细设计 285 11.3.1 数据库连接 285 11.3.2 系统管理设计 285 11.3.3 基础数据管理设计 286 11.3.4 收支管理设计 287 11.3.5 储蓄管理设计 288 11.3.6 借还钱管理设计 290 11.3.7 理财分析设计 291 11.4 系统程序设计 293 11.4.1 登录界面编码 293 11.4.2 主界面编码 295 11.4.3 系统管理编码 300 11.4.4 基础数据管理编码 301 11.4.5 收支管理编码 305 11.4.6 储蓄管理编码 306 11.4.7 借还钱管理编码 312 11.4.8 理财分析编码 312 11.5 本章小结 315 第12章 IT设备资产管理系统 316 12.1 系统概述 316 12.1.1 系统功能 316 12.1.2 系统预览 317 12.2 系统概要设计 318 12.2.1 系统设计思想 318 12.2.2 系统功能模块设计 318 12.2.3 数据库设计 319 12.3 系统详细设计 322 12.3.1 数据库连接 322 12.3.2 资产管理设计 322 12.3.3 软件管理设计 324 12.3.4 服务管理设计 325 12.3.5 报表设计 326 12.3.6 系统管理设计 327 12.4 系统程序设计 329 12.4.1 数据操作编码 329 12.4.2 登录界面编码 331 12.4.3 主界面编码 335 12.4.4 资产管理编码 341 12.4.5 软件管理编码 346 12.4.6 服务管理编码 351 12.4.7 报表编码 355 12.4.8 系统管理编码 356 12.5 本章小结 359

110,561

社区成员

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

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

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