转自:http://www.ibihuo.com/show-63.html php
先来看看手册里位运算符的解释: 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; spa
$b = 2; debug
a & b = 0 (101 & 010)(至关于|的逆运算,如:13 = 8|5,那么13&5结果是5,13&8结果是8) htm
a | b = 7 (101 | 010)(和加法运算相等) get
~a = -6 (~101)(这里很差理解,能够这样记忆:~0=-1;~1=-2......~5=-6) it
a ^ b = 7 (101 ^ 010) io
a << b = 20 (101 << 010) table
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');
//结果: 您拥有:上传,写入,只读权限