按位与 matlab,c# 按位与,按位或
在工作中遇到按位或组合权限串。一直不是特别明白。今天终于花了半个下午的时间搞明白其中的道理。
首先每一个权限数都是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_按位与&;,按位或,取反,左移,右移运算符
//按位与运算& System.out.println(0&0);//0 System.out.println(0&1);//0 System.out.println(1&am ...
按位与(&;)和按位或(|)
/** * 按位与 : & * 按位或 : | */ public class Demo { /** * 按位与: 为什么(5 & 9)的值等于1 * 按位或: 为什么(5 | 9)的 ...
Java 位运算(移位、位与、或、异或、非)
Java提供的位运算符有:左移( <> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
简简单单学会C#位运算
一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...
js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
从0到1,教你实现基于Ruby的watir-webdriver自动化测试
一.为什么选择Ruby []完全开源. []多平台:Ruby可以运行在Linux, UNIX, Windows, MS-DOS, BeOS, OS/.. []多线程:线程就是指在一个程序中处理若干控制 ...
C++程序设计——知识点总结
C++程序设计课程的总结,方便以后快速查阅和复习 Week 2 从C走进C++ 函数指针 函数名是函数的入口地址,指向函数的指针称为"函数指针". 比如,qsort库函数: voi ...
随机推荐
IOS之--UI进阶--多控制器管理第一天
01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已 ...
团体程序设计天梯赛-练习集L1-003. 个位数统计
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.8s 优化到 0.4s
在过去24小时里,一直被这题折腾着... 题目: A Math gameTime Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/12800 ...
Oracle中对XMLType的简单操作(extract、extractvalue...)
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#代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
按位与 matlab,c# 按位与,按位或相关推荐
- 逻辑与和按位与、逻辑或和按位或的区别
首先分别明确一下他们各自的概念. 按位与和按位或 按位与和按位或都属于位操作符. 注意:位操作符的操作数必须是整数. 按位与"&" 按二进制位对应的位进行与运算,对应位都为 ...
- sql位运算符【(位与)、~(位非)、|(位或)、^(位异或)】与位移
1.&(位与) 上下运算,按照与的运算规则:0&0=0 :0&1=0:1&1=1 例如: 170 & 75 结果为:0000 0000 0000 1010 再把 ...
- 按位与运算()和按位或运算符(|)
按位与运算(&) 定义:参加运算的两个数据,按二进制位进行"与"运算. 运算规则: 0&0=0 ,0&1=0 ,1&0=0 ,1&1=1 总 ...
- php 按位与运算,PHP 按位与()运算符应用实践
PHP的按位与运算是将数字转换成二进制格式进行位运算. PHP手册中的讲解为$a & $bAnd(按位与)将把 $a 和 $b 中都为 1 的位设为 1. 1.&的运算方法(奇偶性判断 ...
- java中的 |=(位或运算符)、=(位与运算符)、^=(位异或运算)、~=(位非运算符)
java逻辑运算符 |= 位或运算符 &= 位与运算符 ^= 位异或运算 ~= 位非运算符 |= 位或运算符 |= 运算符和 += 这一类的运算符一样,拆解开就是 a = a | b: 运算规 ...
- 【C语言】按位与、按位或、按位异或
目录 一.按位与(&) 二.按位或(|) 三.按位异或(^) 一.按位与(&) 规则:有0则为0,同时为1才为1 int main() {int a = 3;int b = -5;in ...
- c语言中,,|,||的意思,按位与,按位或的意思
&&在逻辑中表达的是与 比如:a=1,b=0,则a&&b表达为0.也就是假的意思, 在c语言中任何大于0的数都代表真 ||代表的意思就是或 利用上述的例子,a||b表达 ...
- 按位与,按位或,按位异或的理解
按位与 按位与是按二进制位与,比较两个二进制位数,如果上下同为0则为0,如果一个为1,一个为0则为0,如果同时为1则为1. 例:a=5,b=1, a的二进制数为00000000 00000000 00 ...
- 按位与、按位或、按位异或、按位取反、按位左移、按位右移
位运算符比一般的算术运算符速度要快,而且可以实现一些算术运算符不能实现的功能.如果要开发高效率程序,位运算符是必不可少的.位运算符用来对二进制位进行操作,包括:按位与(&).按位或(|).按位 ...
最新文章
- 小学生python-小学生都开始学的Python编程到底是什么?
- ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
- 逻辑io 物理io oracle,Oracle体系结构之SQL语句的执行过程
- 软件质量保证与测试——Ad hoc Test
- react项目打包后路径找不到,项目打开后页面空白的问题
- 【Redis】解析Redis和Java传递数据
- 【MarkDown】转义字符
- 关于Visual Studio “当前不会命中断点.还没有为该文档加载任何符号“的解决方法
- SEGGER RTT使用总结
- web微信授权登陆-配置篇
- PostgreSQL 导入和导出 CSV
- 【整理】爬取网页数据的方法汇总
- java中subject类_RxJava中常见的几种Subject
- windows操作系统32位与64位的含义
- PHP 出现 The requested URL was not found on this server 怎么办?
- 服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473复现验证)
- 降低OLED屏幕功耗的方法
- excel生成动态进度条
- theHarvester使用
- CMOS图像传感器——深入ISO