按位与 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# 按位与,按位或的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab ac电源,基于MATLAB
- 下一篇: php中怎么定义page,css @pa