|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习linux,就意味着更快的开发效率,等更多关于软件本身或者说操作系统本身的理解。
比来项目中要把一批权限把持信息写进一个4字节的十进制数字中,接纳了位运算,基础道理在这里先容一下。
位运算的运算对象是二进制的位,速率快,效力高,并且节俭存储空间,位运举动当作权限把持又相称地天真。可是,位运算也有很年夜的范围,由于在32位盘算机上,位移不克不及凌驾32次,这就请求权限数目不凌驾32种。
以下完成了相似LINUX文件体系的权限把持。
-rwx-rwx-rwx这个在linux中暗示777,我们来看第一段7
x可实行1<<0
w可写1<<1
r可读1<<2
2^0=1,响应2进数为”0001″(2的0次方,下同)
2^1=2,响应2进数为”0010″
2^2=4,响应2进数为”0100″
2^3=8,响应2进数为”1000″
要判别一个数在某些数局限内就能够利用&运算符(数值从下面的表中得来)
如:7=4|2|1 (能够复杂了解成7=4+2+1),用&来操纵,能够晓得7&4、7&2、7&1都是真的,而假如7&8则是假的。
<?php
//界说权限
define(‘READ’,1<<2);//十进制4
define(‘WRITE’,1<<1);//十进制2
define(‘EXCUTE’,1<<0);//十进制1
//付与权限
$user_permission=READ|WRITE;
//考证权限
echo‘可读:’,($user_permission&READ)?‘Yes’:‘No’,“n”;
echo‘可写:’,($user_permission&WRITE)?‘Yes’:‘No’,“n”;
echo‘可实行:’,($user_permission&EXCUTE)?‘Yes’:‘No’,“n”;
?>
详解php位运算
- $a&$band(按位与)
- $a|$bor(按位或)
- $a^$bXor(按位异或)
- ~$aNot(按位非)
- $a<<$bShiftleft(左移)
- $a>>$bShiftright(右移)
$a&$b按位与把$a和$b中都为1的位设为1;
例:10&12=8
101010
121100
10008
$a|$b按位或把$a或$b中有一个为1的为设为1;
例:10|12=14
101010
121100
111014
$a^$b按位异或
例:10^12
101010
121100
01106
~a按位非把$a中的为0的为设为1,1的为设为0
例:~10=
1010101111111111111111111111111111111111111111111111111111111111110101-11
$a<<$b左移把$a中的为向左挪动$b次(每次挪动都暗示乘以2);
例:1<<10=1024
1(1)左移10位10000000000(1024)
相称于1*2的10次方。
$a>>$b右移把$a中的为向右挪动$b次(每次挪动都暗示除以2);
例:1024<<2=1256
10000000000(1024)右移2位就是100000000(256)
常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基的。 |
|