常見的位運算php
運算符號 |
意義 | 運算對象類型 | 運算結果類型 | 實例 |
~ | 非運算 | 整型、字符串 | 整型 | ~a |
& | 與運算 | 整型、字符串 | 整型 | a&b |
| | 或運算 | 整型、字符串 | 整型 | a|b |
^ | 異或運算 | 整型、字符串 | 整型 | a^b |
<< | 位左移運算 | 整型、字符串 | 整型 | a<<2 |
>> | 位右移運算 | 整型、字符串 | 整型 | b>>2 |
權限管理辦法是一個廣泛採用的方法,主要是使用到"位運行符"操做,& 位與運算符、| 位或運行符。參與運算的若是是10進制數,則會被轉換至2進制數參與運算,而後計算結果會再轉換爲10進制數輸出。web
添加權限使用或
判斷權限使用與
去掉權限用異或spa
舉例:code
<?php //賦予權限值-->刪除:八、上傳:四、寫入:二、只讀:1 define("mDELETE",8); define("mUPLOAD",4); define("mWRITE",2); define("mREAD",1); //部門經理,擁有全部權限 echo mDELETE | mUPLOAD | mWRITE | mREAD //至關於 8 + 4 + 2 + 1 = 15 //判斷權限 if($key & mDELETE){ echo '有刪除權限<br>'; } else{ echo '無刪除權限<br>'; } if($key & mUPLOAD){ echo '有上傳權限<br>'; } else{ echo '無上傳權限<br>'; } if($key & mWRITE){ echo '有寫權限<br>'; } else{ echo '無寫權限<br>'; } if($key & mREAD){ echo '有讀權限<br>'; } else{ echo '無讀權限<br>'; } //刪除權限 $nkey = $key ^ mUPLOAD; echo '刪除上傳權限後<br>'; echo "key=$nkey<br>"; if($nkey & mUPLOAD){ echo '有上傳權限<br>'; } else{ echo '無上傳權限<br>'; }
1. 爲何常量都是2的冪次,而不是隨便的整數:保證一位一權限.方便與或等操做.這是使用位表示權限的前提。對象
2. 與運算以後移位的緣由 :由於與操做後, 右邊還出現有其餘0,經過移位,結果就是0或1,能簡化判斷。注意移位與初始值時的移位同樣。字符串
3.有幾位就能夠表示幾種權限,32位能夠表示32種權限。it
作好權限值的分佈,即那個一、二、四、八、16....(這裏還有個順序問題,越高級的權限就要越高的權限值,好比上面的例子所演示的刪除權限)。有了權限分佈表就能夠肯定給某我的什麼權限了,你簡單的理解成要哪一個權限就加上相應的權限值吧。table
這個方法很好用的,缺點就是若是權限分佈得細的話,那麼權限值會愈來愈大,你本身想一想,2的幾回方、若是全部的權限都要則是所有相加。不過對於通常的權限來講這個已經足夠了。class