按位與運算是將數字轉換成二進制格式進行位運算。php
一、&的運算方法(奇偶性判斷)數據庫
整數與「1」進行按位與運算,運算結果爲「0」表示爲偶數,運算結果爲「1」表示爲奇數。數組
<?php //將數組中的值,依次逐個傳入到回調函數中處理,只有處理結果爲true的元素才容許出如今結果數組中 $arr = [1,2,3,4,5,6,7,8,9]; function odd($n){ return $n & 1; //& :按位"與"運算,只有奇數(odd)才能夠返回1,不然返回0 } function even($n){ return !($n & 1);//數組中除了奇數,剩下的就是偶數了 } $arr1 = array_filter($arr, 'odd'); echo '<pre>'; print_r($arr1); echo '</pre>'; echo '<hr>'; $arr1 = array_filter($arr, 'even'); echo '<pre>'; print_r($arr1); echo '</pre>'; echo '<hr>'; //對應輸出結果 //Array //( // [0] => 1 // [2] => 3 // [4] => 5 // [6] => 7 // [8] => 9 //) //Array //( // [1] => 2 // [3] => 4 // [5] => 6 // [7] => 8 //)
3 和1轉換爲二進制爲
3 二進制:11
1 二進制:01函數
則3&1的二進制運算結果爲01,轉換爲十進制就是‘1’;code
4 二進制:100
1 二進制:001字符串
則4&1的二進制運算結果爲000,轉換爲十進制就是‘0’;get
PS : ‘%’(取模運算)符號也能夠用來計算奇偶性,「3%2」 的輸出結果爲1 ,「4%2」的輸出結果爲0。「%」的運算效率要略高於「&」運算符。回調函數
function getMillisecond() { list($t1, $t2) = explode(' ', microtime()); return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000); } /* 判斷數字的奇偶性 */ $a = getMillisecond(); for($i=1;$i<10000000;$i++) $i&1; $b = getMillisecond(); echo '&執行1千萬次計算毫秒耗時:'.($b-$a); //&執行1千萬次計算毫秒耗時:1068 echo '<br>'; $c = getMillisecond(); for($i=1;$i<10000000;$i++) $i%2; $d = getMillisecond(); echo '%執行1千萬次計算毫秒耗時:'.($d-$c); //%執行1千萬次計算毫秒耗時:1035
二、用戶權限的判斷
假設一個系統中用戶權限分配模塊,設置權限爲1=>查看,2=>新增, 4=>修改 ,8=>刪除,如此存儲用戶的權限,只須要在數據庫中存一個整數合便可,不用存儲間隔出的字符串。io
若是用戶擁有新增和查看權限,功能代碼爲:1+2 = 3;用戶擁有全部權限,則功能 代碼爲:1+2+4+8 = 15;function
用戶全部用的權限爲12
檢測用戶權限是否擁有修改權限:12&4 結果爲4,表示擁有修改權限。
檢測用戶權限是否擁有新增權限:12&2 結果爲0,表示沒有新增權限。
在數據庫中查找全部擁有修改權限的用戶:select * from user where (user_mod&4) > 0,便可查出來全部擁有修改權限的用戶。