首頁  >  文章  >  後端開發  >  你所不知道的php位元運算子使用技巧總結

你所不知道的php位元運算子使用技巧總結

伊谢尔伦
伊谢尔伦原創
2017-06-21 10:03:221487瀏覽

權限管理辦法是一個普遍採用的方法,主要是使用到」位元運行符」操作,& 位元與運算子、| 位元或運行符。參與運算的如果是10進位數,則會被轉換至2進位數參與運算,然後計算結果會再轉換為10進位數輸出。

它的權限值是這樣的:

2^0=1,對應2進數為”0001″(在這裡^我表示成”次方”,即:2的0次方,下同)

2^1=2,對應2進數為」0010″
2^2=4,對應2進數為」0100″
2^3 =8,對應2進數為」1000″

要判斷一個數在某些數範圍內就可以使用& 運算子(數值從上面的表中得來)

如:7=4|2|1 (你也可以簡單理解成7=4+2+1)

用& 來操作,可以知道7&4、7&2、7&1都是真的,而如果7&8則是假的

&、| 不熟悉的就要去查查手冊,看看是怎麼用的了

實例說明:

<?php
// 赋予权限值-->删除:8、上传:4、写入:2、只读:1
define(“mDELETE”,8);
define(“mUPLOAD”,4);
define(“mWRITE”,2);
define(“mREAD”,1);
//vvvvvvvvvvvvv使用说明vvvvvvvvvvvvv
//部门经理的权限为(假设它拥有此部门的所有权限),| 是位或运行符,不熟悉的就查查资料
echo mDELETE|mUPLOAD|mWRITE|mREAD ,”
“;// 相当于是把上面的权限值加起来:8+4+2+1=15
// 设我只有 upload 和 read 权限,则
echo mUPLOAD|mREAD ,”
“;//相当于是把上传、只读的权限值分别相加:4+1=5
/*
*赋予它多个权限就分别取得权限值相加,又比如某位员工拥有除了删除外的权限其余都拥有,那它的权限值是多少?
*应该是:4+2+1=7
*明白了怎么赋值给权限吧?
*/
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//判断某人的权限可用,设权限值在$key中
/*
*判断权限用&位与符,
*/
$key = 13;//13=8+4+1
if($key & mDELETE) echo “有删除权限
“; //8
if($key & mUPLOAD) echo “有上传权限
“; //4
$a=$key & mWRITE; echo “有写权限
“.$a; //无此权限
if($key & mREAD) echo “有读权限
“; //1
?>

OK,權限分值的這其中一個演算法就是這樣的,可以說是簡單又有效率。也不知大家明白沒有,不懂也沒關係,記得例子就行了。前提就是做好權限值的分佈,也就是那個1、2、4、8、16….(這裡還有個順序問題,越高級的權限就要越高的權限值,例如上面的例子所示範的刪除權限)。有了權限分佈表就可以確定要給某個人甚麼權限了,你簡單的理解成要哪個權限就加上對應的權限值吧。

這個方法很好用的,缺點就是如果權限分佈得細的話,那麼權限值會越來越大,你自己想想,2的幾次方、如果所有的權限都要則是全部相加。不過對於一般的權限來說這個已經足夠了。

位元運算技巧

1.取得INT型最大值和最小值
最大值:

~ (1 4605d540ee1a6df15f12f30ac6216c26> 1

3.乘以2的m次方和除以2的m次方
乘以2的m次方:

$n bde61f4db4fa3d7452dba4756397b387> $m

4.判斷整數的奇偶性

($n & 1) == 1

5.不用臨時變數交換兩個數字

$a ^= $b; 
$b ^= $a; 
$a ^= $b; 

6.從低位到高位,取n的第m位元

return ($n >> ($m-1)) & 1; 

#7 .從低位到高位.將n的第m位置1

return $n | (1 << ($m-1));

#8.從低位到高位,將n的第m位置0

return $n & ~(1 << ($m-1));

以上是你所不知道的php位元運算子使用技巧總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn