欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

按位与 matlab,c# 按位与,按位或

发布时间:2025/3/21 C# 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 按位与 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&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# 按位与,按位或的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。