按位与 matlab,c# 按位与,按位或
在工作中遇到按位或組合權(quán)限串。一直不是特別明白。今天終于花了半個(gè)下午的時(shí)間搞明白其中的道理。
首先每一個(gè)權(quán)限數(shù)都是2的N次方數(shù)
如:k1=2 ; //添加
k2=4 ; //刪除
k3=8; //修改
...
如此定義功能權(quán)限數(shù),當(dāng)需要組合權(quán)限時(shí),就需要對各個(gè)所擁有的權(quán)限數(shù)按位或了。
如:
purview = k2|k3; // 賦給添加和刪除權(quán)限
當(dāng)需要判斷在權(quán)限串中是否擁有某一權(quán)限時(shí),就需要進(jìn)行按位與。
如:
if((purview & k1) >0)//判斷此權(quán)限串是否擁有添加權(quán)限,結(jié)果>0 則進(jìn)入if語句代碼塊中
{
....
}
說到這里肯定會有疑問了,別急我來細(xì)細(xì)講解。
第一,2的8位二進(jìn)制值為00000010
4的8位二進(jìn)制值為00000100
8的8位二進(jìn)制值為00001000
第二,當(dāng)對8和4進(jìn)行按位或操作后,結(jié)果為:
4|8 = 12
00000100 |00001000 = 00001100
為什么會是這樣呢?在進(jìn)行按位或操作時(shí) 00000001|00000001=00000001?? ;00000001|00000000=1 ;00000000|00000000=00000000
也就是說除了0|0結(jié)果是0外,其它運(yùn)算結(jié)果的都是1
所以??? 00000100 |00001000 = 00001100
也就說上面的 purview = k2|k3 的二進(jìn)制值結(jié)果是 purview =00000100 |00001000 =00001100了
第三,當(dāng)對8和4進(jìn)行按位與操作后,結(jié)果為:
4&8=0
00000100 &00001000 = 00000000
同樣為什么會是這樣呢?在進(jìn)行按位與操作時(shí) 00000001&00000001=00000001?? ;00000001&00000000=00000000 ;00000000&00000000=00000000
也就是說除了1&1結(jié)果是1外,其它運(yùn)算結(jié)果的都是0
所以 00000100 &00001000 = 00000000
上面的if((purview & k1) >0)的結(jié)果就是 00001100&00000010 =00000000 也就是(0>0)=false
同樣if((purview & k2) >0)的結(jié)果就是 00001100&00000100 =00000100=4=k2 也就是 (4>0)=true
這樣我們就理解組合權(quán)限串和判斷權(quán)限的原理了,說白了就是對2N次方數(shù)的按位與和按位或。
///
/// 計(jì)算權(quán)限總和
///
/// 數(shù)據(jù)庫現(xiàn)有權(quán)限總和
/// 取消或設(shè)置操作(0取消,1設(shè)置)
/// 設(shè)置操作對應(yīng)的狀態(tài)值
///
public static int ReturnStatusTotal(int OldStatus, int Action, int StatusVal)
{
int NewStatus = OldStatus;
if (Action == 1)
{
//判斷此權(quán)限串是否擁有相應(yīng)操作,不包括時(shí)加入權(quán)限
if ((OldStatus & StatusVal) <= 0)
{
NewStatus = OldStatus | StatusVal;
}
}
else
{
//判斷此權(quán)限串是否擁有相應(yīng)操作,有權(quán)限時(shí)移除權(quán)限
if ((OldStatus & StatusVal) > 0)
{
NewStatus = OldStatus & ~StatusVal;
}
}
return NewStatus;
}
NewStatus = CommonUtilities.ReturnStatusTotal(OldStatus, objRequest.Action, (int)StatusEnum.ZhiDing);
Java_按位與&;,按位或,取反,左移,右移運(yùn)算符
//按位與運(yùn)算& 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 位運(yùn)算(移位、位與、或、異或、非)
Java提供的位運(yùn)算符有:左移( <>?) .無符號右移(?>>>?) .位與(?&?)?.位或( |?).位非(?~?).位異或( ...
InstallShield 腳本語言學(xué)習(xí)筆記
InstallShield腳本語言是類似C語言,利用InstallShield的向?qū)Щ蚰0宥伎梢陨苫镜哪_本程序框架,可以在此基礎(chǔ)上按自己的意愿進(jìn)行修改和添加. ????一.基本語法規(guī)則 ???? ...
簡簡單單學(xué)會C#位運(yùn)算
一.理解位運(yùn)算 要學(xué)會位運(yùn)算,首先要清楚什么是位運(yùn)算?程序中的所有內(nèi)容在計(jì)算機(jī)內(nèi)存中都是以二進(jìn)制的形式儲存的(即:0或1),位運(yùn)算就是直接對在內(nèi)存中的二進(jìn)制數(shù)的每位進(jìn)行運(yùn)算操作 二.理解數(shù)字進(jìn)制 上面 ...
js中的位運(yùn)算
按位運(yùn)算符是把操作數(shù)看作一系列單獨(dú)的位,而不是一個(gè)數(shù)字值.所以在這之前,不得不提到什么是"位": 數(shù)值或字符在內(nèi)存內(nèi)都是被存儲為0和 1的序列,每個(gè)0和1被稱之為1個(gè)位,比如說10 ...
從0到1,教你實(shí)現(xiàn)基于Ruby的watir-webdriver自動化測試
一.為什么選擇Ruby []完全開源. []多平臺:Ruby可以運(yùn)行在Linux, UNIX, Windows, MS-DOS, BeOS, OS/.. []多線程:線程就是指在一個(gè)程序中處理若干控制 ...
C++程序設(shè)計(jì)——知識點(diǎn)總結(jié)
C++程序設(shè)計(jì)課程的總結(jié),方便以后快速查閱和復(fù)習(xí) Week 2 從C走進(jìn)C++ 函數(shù)指針 函數(shù)名是函數(shù)的入口地址,指向函數(shù)的指針稱為"函數(shù)指針". 比如,qsort庫函數(shù): voi ...
隨機(jī)推薦
IOS之--UI進(jìn)階--多控制器管理第一天
01-項(xiàng)目中常見的文件(LaunchScreen) Xcode5 框架是蘋果事先已經(jīng)導(dǎo)入進(jìn)去的.在項(xiàng)目的結(jié)構(gòu)當(dāng)中就能夠看到導(dǎo)入的框架. Xcode6 會自動導(dǎo)入一些覺見的框架.在項(xiàng)目結(jié)構(gòu)當(dāng)中,看不到已 ...
團(tuán)體程序設(shè)計(jì)天梯賽-練習(xí)集L1-003. 個(gè)位數(shù)統(tǒng)計(jì)
L1-003. 個(gè)位數(shù)統(tǒng)計(jì) 時(shí)間限制 400 ms 內(nèi)存限制 65536 kB 代碼長度限制 8000 B 判題程序 Standard 作者 陳越 給定一個(gè)k位整數(shù)N = dk-1*10k-1?+ . ...
centos curl web站點(diǎn)監(jiān)控實(shí)踐
1,監(jiān)控給定web站點(diǎn)的狀態(tài)--站點(diǎn)請求返回代碼,下載整個(gè)web站點(diǎn)頁面文本到-o 指定的文本 curl -o /dev/null -s-silent -w--wirte-out "%{ht ...
oracle系統(tǒng)參數(shù)修改
create pfile='/home/oracle/sss.ora' from spfile; create spfile from pfile='/home/oracle/sss.ora'; al ...
將 子集和問題 運(yùn)行時(shí)間從 200.8s 優(yōu)化到 0.4s
在過去24小時(shí)里,一直被這題折騰著... 題目: A Math gameTime Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/12800 ...
Oracle中對XMLType的簡單操作(extract、extractvalue...)
Oracle中對XMLType的簡單操作(extract.extractvalue...) ? ?1.下面先創(chuàng)建一個(gè)名未test.xml的配置文件. <?xml version="1. ...
前后端分離djangorestframework——限流頻率組件
頻率限制 什么是頻率限制 目前我們開發(fā)的都是API接口,且是開房的API接口.傳給前端來處理的,也就是說,只要有人拿到這個(gè)接口,任何人都可以通過這個(gè)API接口獲取數(shù)據(jù),那么像網(wǎng)絡(luò)爬蟲的,請求速度又快, ...
HDU 4821 String(BKDRHash)
http://acm.hdu.edu.cn/showproblem.php?pid=4821 題意:給出一個(gè)字符串,現(xiàn)在問你可以找出多少個(gè)長度為M*L的子串,該子串被分成L個(gè)段,并且每個(gè)段的字符串都是 ...
QPainter繪制特殊線條
參考資料: https://www.cnblogs.com/Jace-Lee/p/5946342.html 效果圖: 代碼: void WgtText::paintEvent(QPaintEvent ...
設(shè)計(jì)模式-生成者模式之c#代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
總結(jié)
以上是生活随笔為你收集整理的按位与 matlab,c# 按位与,按位或的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab ac电源,基于MATLAB
- 下一篇: c# 遍历文件夹深度,C#遍历文件夹,直