C 中使用位運算來實現許可權管理

2021-05-02 22:01:38 字數 913 閱讀 5002

常用的位運算主要有與(&), 或(|)和非(~), 比如:

1 & 0 = 0, 1 | 0 = 1, ~1 = 0

在設計許可權時, 我們可以把許可權管理操作轉換為c#位運算來處理.

第一步, 先建立乙個列舉表示所有的許可權管理操作:

1. [flags]public enum permissions

[flags]表示該列舉可以支援c#位運算, 而列舉的每一項值, 我們用2的n次方來賦值, 這樣表示成二進位制時剛好是1 = 0001, 2 = 0010, 4 = 0100, 8 = 1000等, 每一位表示一種許可權, 1表示有該許可權, 0表示沒有.

接下來是許可權的運算:

1. 許可權的加法, 使用與運算來實現. 我們知道, 0001 | 0100 = 0101, 這樣就表示同時具有第一位和第三位的許可權管理了, 列舉表示為:

permissions per = permissions.insert | permissions.update

2. 許可權的減法, 使用與運算+非運算來實現, 如上面要去掉insert許可權, 操作為:

permissions per &= ~permissions.insert即是 0101 & ~0001 = 0101 & 1110 = 0100

3. 許可權的判斷, 使用與運算, 當判斷用一使用者是否具有該操作許可權時, 要把使用者的的許可權與操作許可權進行與運算, 如果得到的結果仍是操作許可權管理, 則表示使用者具有該許可權:

1. permissions per = permissions.insert | permissions.update;

2. if(per & permissions.insert = permissions.insert)

3. 比較過程為 0101 & 0001 = 0001, 0001的0位用與c#位運算把其它位都置成0, 變成只比較1的這一位.

位運算來實現加法運算

calculate the sumof two integers a and b,but you are not allowed to use the operator and example given a 1 and b 2,return 3.分析 這裡要求我們不能用加法 減法等運算子來實現加法...

php位運算許可權管理

簡單許可權類 class peak auth 本類不允許物件複製的操作 public function clone 設定許可權的詳細資訊 param string authmessage public function setauthmessage authmessage 獲取權名稱 return ...

HashMap 優化 使用 運算 來實現取模

1.前提條件 值必須是2的冪次方,看j a1.8 hashmap原始碼 2.找到 if p tab i n 1 hash null n必須是2的倍數 首先是hash這個值,轉成二進位制,就是0和1,我們先用個例子來說明下,n 4,hash 13 13的二進位制是1101 4的二進位制是 0100 高...