作为程序员一定要保持良好的睡眠,才能好编程

php按位运算轻松管理百万级数据

发布时间:2018-11-02


 

符号
名称
说明 (转移完成后是二进制数)
示例
总结
<<
左移
 把左边的数 向左移动两位 以0补全

1<<0  等同于 1   等于 1

1<<1  等同于 10  等于 2

1<<2  等同于 100  等于 4

1<<3  等同于 1000  等于 8

-
|
按位或
两个数有一个是1 就等于1     不进位加法
3|2  换成二进制  11 | 10  =11 等于3

多位二进制也是一样,遵循规则,

11 和 10  ,我们转换成十进制来说

十位上都一样,是1 ,个位是只要有一个数是 1 就是1 ,则 等到11 ,11换算成二进制就是3


&
按位与
只有两个数都为1时 等于1     不进位加法3&2  换成二进制  11 & 10 =10   等于2

^
按位异或
两个数不相等则等于1 ,相等则等于0


~
取反



>>右移a>>b 把十进制数转成二进制数后,去掉 右边 b位

8>>2   去掉右边2位  得到 2   8的二进制数1000


10>>2   去掉右边2位  得到 2   8的二进制数1010 去掉后边2位 得到 2


20>>2 =5   剩下二进制 101 转成十进制 5


20>>3 =2 






用途:

使用上面介绍的运算符可以很轻松地实现权限管理

//定义权限$create = 1;
$update = 2;
$read = 4;
$delete = 8;
$all = $create | $update | $read | $delete;//定义用户组权限$admin = $all; //管理员拥有所有权限$guest = $create | $read; //访客只有添加和读权限$user = $all & ~$delete; //用户拥有除了删除以外的所有权限//判断某个组是否拥有某个权限var_dump($user & $update, $user & $delete, $guest & $update);#=>int(2) int(0) int(0)