在工作中遇到按位或组合权限串。一直不是特别明白。今天终于花了半个下午的时间搞明白其中的道理。

首先每一个权限数都是2的N次方数

如:k1=2 ; //添加

k2=4 ; //删除

k3=8; //修改

...

如此定义功能权限数,当需要组合权限时,就需要对各个所拥有的权限数按位或了。

如:

purview = k2|k3; // 赋给添加和删除权限

当需要判断在权限串中是否拥有某一权限时,就需要进行按位与。

如:

if((purview & k1) >0)//判断此权限串是否拥有添加权限,结果>0 则进入if语句代码块中

{

....

}

说到这里肯定会有疑问了,别急我来细细讲解。

第一,2的8位二进制值为00000010

4的8位二进制值为00000100

8的8位二进制值为00001000

第二,当对8和4进行按位或操作后,结果为:

4|8 = 12

00000100 |00001000 = 00001100

为什么会是这样呢?在进行按位或操作时 00000001|00000001=00000001   ;00000001|00000000=1 ;00000000|00000000=00000000

也就是说除了0|0结果是0外,其它运算结果的都是1

所以    00000100 |00001000 = 00001100

也就说上面的 purview = k2|k3 的二进制值结果是 purview =00000100 |00001000 =00001100了

第三,当对8和4进行按位与操作后,结果为:

4&8=0

00000100 &00001000 = 00000000

同样为什么会是这样呢?在进行按位与操作时 00000001&00000001=00000001   ;00000001&00000000=00000000 ;00000000&00000000=00000000

也就是说除了1&1结果是1外,其它运算结果的都是0

所以 00000100 &00001000 = 00000000

上面的if((purview & k1) >0)的结果就是 00001100&00000010 =00000000 也就是(0>0)=false

同样if((purview & k2) >0)的结果就是 00001100&00000100 =00000100=4=k2 也就是 (4>0)=true

这样我们就理解组合权限串和判断权限的原理了,说白了就是对2N次方数的按位与和按位或。

///

/// 计算权限总和

///

/// 数据库现有权限总和

/// 取消或设置操作(0取消,1设置)

/// 设置操作对应的状态值

///

public static int ReturnStatusTotal(int OldStatus, int Action, int StatusVal)

{

int NewStatus = OldStatus;

if (Action == 1)

{

//判断此权限串是否拥有相应操作,不包括时加入权限

if ((OldStatus & StatusVal) <= 0)

{

NewStatus = OldStatus | StatusVal;

}

}

else

{

//判断此权限串是否拥有相应操作,有权限时移除权限

if ((OldStatus & StatusVal) > 0)

{

NewStatus = OldStatus & ~StatusVal;

}

}

return NewStatus;

}

NewStatus = CommonUtilities.ReturnStatusTotal(OldStatus, objRequest.Action, (int)StatusEnum.ZhiDing);

Java&lowbar;按位与&amp&semi;&comma;按位或&comma;取反&comma;左移&comma;右移运算符

//按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...

按位与(&amp&semi;)和按位或(&vert;)

/** * 按位与 : & * 按位或 : | */ public class Demo { /** * 按位与: 为什么(5 & 9)的值等于1 * 按位或: 为什么(5 | 9)的 ...

Java 位运算&lpar;移位、位与、或、异或、非)

Java提供的位运算符有:左移( <> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

InstallShield 脚本语言学习笔记

InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

简简单单学会C&num;位运算

一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

js中的位运算

按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

从0到1,教你实现基于Ruby的watir-webdriver自动化测试

一.为什么选择Ruby []完全开源. []多平台:Ruby可以运行在Linux, UNIX, Windows, MS-DOS, BeOS, OS/.. []多线程:线程就是指在一个程序中处理若干控制 ...

C&plus;&plus;程序设计——知识点总结

C++程序设计课程的总结,方便以后快速查阅和复习 Week 2 从C走进C++ 函数指针 函数名是函数的入口地址,指向函数的指针称为"函数指针". 比如,qsort库函数: voi ...

随机推荐

IOS之--UI进阶--多控制器管理第一天

01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已 ...

团体程序设计天梯赛-练习集L1-003&period; 个位数统计

L1-003. 个位数统计 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个k位整数N = dk-1*10k-1 + . ...

centos curl web站点监控实践

1,监控给定web站点的状态--站点请求返回代码,下载整个web站点页面文本到-o 指定的文本 curl -o /dev/null -s-silent -w--wirte-out "%{ht ...

oracle系统参数修改

create pfile='/home/oracle/sss.ora' from spfile; create spfile from pfile='/home/oracle/sss.ora'; al ...

将 子集和问题 运行时间从 200&period;8s 优化到 0&period;4s

在过去24小时里,一直被这题折腾着... 题目: A Math gameTime Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/12800 ...

Oracle中对XMLType的简单操作(extract、extractvalue&period;&period;&period;)

Oracle中对XMLType的简单操作(extract.extractvalue...)    1.下面先创建一个名未test.xml的配置文件. <?xml version="1. ...

前后端分离djangorestframework——限流频率组件

频率限制 什么是频率限制 目前我们开发的都是API接口,且是开房的API接口.传给前端来处理的,也就是说,只要有人拿到这个接口,任何人都可以通过这个API接口获取数据,那么像网络爬虫的,请求速度又快, ...

HDU 4821 String(BKDRHash)

http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给出一个字符串,现在问你可以找出多少个长度为M*L的子串,该子串被分成L个段,并且每个段的字符串都是 ...

QPainter绘制特殊线条

参考资料: https://www.cnblogs.com/Jace-Lee/p/5946342.html 效果图: 代码: void WgtText::paintEvent(QPaintEvent ...

设计模式-生成者模式之c&num;代码

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

按位与 matlab,c# 按位与,按位或相关推荐

  1. 逻辑与和按位与、逻辑或和按位或的区别

    首先分别明确一下他们各自的概念. 按位与和按位或 按位与和按位或都属于位操作符. 注意:位操作符的操作数必须是整数. 按位与"&" 按二进制位对应的位进行与运算,对应位都为 ...

  2. sql位运算符【(位与)、~(位非)、|(位或)、^(位异或)】与位移

    1.&(位与) 上下运算,按照与的运算规则:0&0=0 :0&1=0:1&1=1 例如: 170 & 75 结果为:0000 0000 0000 1010 再把 ...

  3. 按位与运算()和按位或运算符(|)

    按位与运算(&) 定义:参加运算的两个数据,按二进制位进行"与"运算. 运算规则: 0&0=0 ,0&1=0 ,1&0=0 ,1&1=1 总 ...

  4. php 按位与运算,PHP 按位与()运算符应用实践

    PHP的按位与运算是将数字转换成二进制格式进行位运算. PHP手册中的讲解为$a & $bAnd(按位与)将把 $a 和 $b 中都为 1 的位设为 1. 1.&的运算方法(奇偶性判断 ...

  5. java中的 |=(位或运算符)、=(位与运算符)、^=(位异或运算)、~=(位非运算符)

    java逻辑运算符 |= 位或运算符 &= 位与运算符 ^= 位异或运算 ~= 位非运算符 |= 位或运算符 |= 运算符和 += 这一类的运算符一样,拆解开就是 a = a | b: 运算规 ...

  6. 【C语言】按位与、按位或、按位异或

    目录 一.按位与(&) 二.按位或(|) 三.按位异或(^) 一.按位与(&) 规则:有0则为0,同时为1才为1 int main() {int a = 3;int b = -5;in ...

  7. c语言中,,|,||的意思,按位与,按位或的意思

    &&在逻辑中表达的是与 比如:a=1,b=0,则a&&b表达为0.也就是假的意思, 在c语言中任何大于0的数都代表真 ||代表的意思就是或 利用上述的例子,a||b表达 ...

  8. 按位与,按位或,按位异或的理解

    按位与 按位与是按二进制位与,比较两个二进制位数,如果上下同为0则为0,如果一个为1,一个为0则为0,如果同时为1则为1. 例:a=5,b=1, a的二进制数为00000000 00000000 00 ...

  9. 按位与、按位或、按位异或、按位取反、按位左移、按位右移

    位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能.如果要开发高效率程序,位运算符是必不可少的.位运算符用来对二进制位进行操作,包括:按位与(&).按位或(|).按位 ...

最新文章

  1. 小学生python-小学生都开始学的Python编程到底是什么?
  2. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
  3. 逻辑io 物理io oracle,Oracle体系结构之SQL语句的执行过程
  4. 软件质量保证与测试——Ad hoc Test
  5. react项目打包后路径找不到,项目打开后页面空白的问题
  6. 【Redis】解析Redis和Java传递数据
  7. 【MarkDown】转义字符
  8. 关于Visual Studio “当前不会命中断点.还没有为该文档加载任何符号“的解决方法
  9. SEGGER RTT使用总结
  10. web微信授权登陆-配置篇
  11. PostgreSQL 导入和导出 CSV
  12. 【整理】爬取网页数据的方法汇总
  13. java中subject类_RxJava中常见的几种Subject
  14. windows操作系统32位与64位的含义
  15. PHP 出现 The requested URL was not found on this server 怎么办?
  16. 服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473复现验证)
  17. 降低OLED屏幕功耗的方法
  18. excel生成动态进度条
  19. theHarvester使用
  20. CMOS图像传感器——深入ISO

热门文章

  1. Python编程基础:第三十节 文件检测File Detection
  2. 一块钱哪里去了?--java浮点型背后的故事
  3. 八种架构设计模式及其优缺点概述
  4. 从 Spring Cloud 看一个微服务框架的「五脏六腑]
  5. 利用反射给JAVABEAN实例赋值
  6. solr源码分析之数据导入DataImporter追溯。
  7. List list= new ArrayList为什么这样写 接口引用指向实现类的对象
  8. 框架开发之Java注解的妙用
  9. 既要宽广,又要深邃,这也行
  10. MySQL - 践行索引优化