PHP位运算符的作用

转自:http://www.ibihuo.com/show-63.html

先来看看手册里位运算符的解释:

例子 名称 结果
$a & $b And(按位与) 将把$a和$b中都为 1 的位设为 1。
$a | $b Or(按位同或) 将把$a和$b中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把$a和$b中一个为 1 另一个为 0 的位设为 1。
~ $a Not(按位取反) 将$a中为 0 的位设为 1,反之亦然。
$a << $b Shift left(左移) 将$a中的位向左移动$b次(每一次移动都表示“乘以 2”)。
$a >> $b Shift right(右移) 将$a中的位向右移动$b次(每一次移动都表示“除以 2”)。

再看一个实际的列子加深理解:

$a = 5;

$b = 2;

a & b = 0 (101 & 010)(相当于|的逆运算,如:13 = 8|5,那么13&5结果是5,13&8结果是8)

a | b = 7 (101 | 010)(和加法运算相等)

~a = -6 (~101)(这里不好理解,可以这样记忆:~0=-1;~1=-2......~5=-6)

a ^ b = 7 (101 ^ 010)

a << b = 20 (101 << 010)

a >> b = 1 (101 >> 010)
 
接下来和大家共享一下 位运算符在php的运用
一:ecshop里面的init.php文件有些这样的语句:
if ((DEBUG_MODE & 1) == 1)
{
    error_reporting(E_ALL);
}
else
{
    error_reporting(E_ALL ^ (E_NOTICE | E_WARNING));
}
if ((DEBUG_MODE & 4) == 4)
{
    include(ROOT_PATH . 'includes/lib.debug.php');
}
ecshop用这样的方式实现了不同的报错方式
二: 赋予权限值
define(“DELETE”,8);//删除
define(“UPLOAD”,4);//上传
define(“WRITE”,2);//写入
define(“READ”,1);//只读
/*这是个权限判定函数*/
function power($key)
{
       $str = '';
       if(($key&DELETE) == DELETE) $str .= '删除,';
       if(($key&UPLOAD) == UPLOAD) $str .= '上传,';
       if(($key&WRITE) == WRITE) $str .= '写入,';
       if(($key&READ) == READ) $str .= '只读,';
       if($str != '')
       {
            echo "您拥有:".rtrim($str,',').'权限';
       }
       else
       {
            echo "您没有任何权限";
       }
}
//假如一个人的权限值为7
power('7');
//结果: 您拥有:上传,写入,只读权限


你可能感兴趣的:(PHP位运算符的作用)