php中的位運算和進製是比較冷門的知識,感覺很簡單也很好理解,但是在實際場景中卻很少使用,本篇博文就是簡單了解基本概念以及講解如何去實際使用.
位運算php中的位運算子是對整形進行的操作,比如對於十進位制,二進位制,八進位制等數字的一些操作.& (按位與 and)
| (按位或 or)
~ (按位取反 not)
^ (按位異或 xor)
<< (bitwise left shift)
>> (bitwise right shift)
這個時候可以通過乙個status欄位來儲存這些狀態,這個欄位的型別是整形,可以儲存十進位制,八進位制,二進位制,十六進製制. 那麼這麼多狀態`如何在乙個字段值中表示呢,可以進行如下規定:整數(二進位制)狀態說明0001刪除狀態第一位等於1
0100收藏狀態第三位等於1
1000喜歡狀態第四位等於1
希望通過上面的例子你能明白位運算子的作用,另外位運算子和邏輯運算子比較容易讓人誤解.可以這樣去區分和理解:位運算子是對兩個整數的bits進行操作,然後返回結果,that means it's not a yes or no thing.
假如位運算子被用在條件語句中,他們將會進行邏輯比較.
邏輯操作符是比較多個表示式,然後返回true或者false.
進製運算
上面位運算子的例子中,作為操作符數的都是二進位制,但是也可以是其它進製.
php中支援二進位制(binary),八進位制(octal),十進位制(decimal),十六進製制(hexadecimal).
它們都是整型,進製和編碼密切相關,這裡僅僅說明php中的進製是如何表達的,以及之間是如何轉換的.
如何在整型變數定義進製:$n = 0b10000 ; //二進位制$n = 16; //十進位制$n = 0x10; //十六進製制$n = 020;//八進位制在echo輸出的時候,不管是什麼型別的整數,最後輸出的都是十進位制
定義字串的時候如何通過進製表示://\[0-7] #八進位制表達方式//\x[0-9a-fa-f] #十六進製制表達方式$str = "\20";$str = "\x10";echo輸出的時候,會輸出字元dle
php內部函式如何支援進製轉換,共有二種轉換方式:$n = 16;echo dechex($n) . "_" . decbin($n);
$n = base_convert('10',16,10 ); //'10'本身的進製由第二個引數決定$nn = base_convert($n, 10,2 );echo $n . "_" . $nn ;//以上的函式返回各進製的字串表達形式,那麼如何返回這些變數代表的字元呢.echo chr(base_convert('10',16,10 ));
sprintf如何在進製中使用:
這個函式實際上和進製沒有非常耦合的關係,可以將不同進製的整型轉換為不同進製的字串表示$n = sprintf("%x", 0b10000 );$n = sprintf("%x", 0x10 );$n = sprintf("%x", 020 );$n = sprintf("%x", 16 );$n = sprintf("%x", "a" );$n = sprintf("%s", 0b10000 );$n = sprintf("%c", 0b10000 );#返回ascii值對應的字元
PHP位運算許可權設計
首先將許可權按照2的次方來定義值,依次類推 define add 1 增加許可權 define upd 2 修改許可權 define sel 4 查詢許可權 define del 8 刪除許可權 a access add upd sel del a擁有增刪改查許可權 b access add upd...
php位運算許可權管理
簡單許可權類 class peak auth 本類不允許物件複製的操作 public function clone 設定許可權的詳細資訊 param string authmessage public function setauthmessage authmessage 獲取權名稱 return ...
php 位運算許可權問題
許可權問題比如 linux角色許可權 可讀 可寫 可執行 許可權二進位制分別是100 010 001,十進位制就是4 2 1,資料庫許可權欄位若為state 預設為0,通常許可權都是多選框形式,如下圖 可執行 label 3div 4 br 5 div class row style margin ...