了解二进制权限,二进制权限的应用(PHP演示)

一, 二进制的逻辑运算

1. “&” 与运算 相同位的值都为1结果就为1,有一位为0结果就为0。

举例1:

1&1=1 1&0=0
0&1=0 0&0=0

举例2:

二进制1 110010
二进制2 001010
结果 000010
2. “|” 或运算 相同位的值有一个为1结果就为1,全部为0结果为0。

举例1:

1&1=1 1&0=1
0&1=1 0&0=0

举例2:

二进制1 110010
二进制2 001010
结果 111010
3. “^” 异或运算 相同位的值都相等就为0,有一位不同就为1。

举例1:

0&1=1 0&0=0
1&1=0 1&0=1

举例2:

二进制1 110010
二进制2 001010
结果 111000
4. “~” 非运算(取反运算,这个叫法好像都对) 将二进值位上的值换成相反的值

举例1:

~1=0 ~0=1
5. “<<” 左移 将二进制向左移动N位,然后用0在右侧补全N位。

举例1:

左移2位 结果
110010 << 2 001000
6. “>>” 右移 将二进制向右移动N位,然后在左侧补全N位(正数补0,负数补1)。

举例1:

右移2位 结果
110010 >> 2 001100

二,了解和应用

PHP中“&”和“^”运算的两个值如果都是字符串,则将对组成字符串的字符的ASCII值进行运算,结果将是字符串。
在所有其他情况下,两个操作数都将转换为整数,结果将为整数。

“~” 运算符的操作数是字符串,则将对组成字符串的字符的ASCII值执行操作,结果将是字符串,否则操作数和结果将被视为整数。

二进制权限就是每个权限都用一个二进制数去表示,例如Linux中的读、写、运行,对应着4、2、1。

二进制权限可代表的权限种类受限于程序语言的类型长度,即可代表2^N种。

PHP演示:

<?php

// 6种权限类别
$one   = 1;
$two   = 2;
$three = 4;
$four  = 8;
$five  = 16;
$six   = 32;

// 用户
$user  = 0;

// 增加权限类别
$user  = ($two|$three|$four|$six);

echo "增加后权限{$user}<br>";

// 验证权限类别
if (($user&$six) == $six) {
    echo "验证拥有权限{$six}<br>";
} else {
    echo "验证没有权限{$six}<br>";
}

// 删除权限类别
$user = $user & (~$six);

if (($user&$five) == $six) {
    echo "删除six后验证拥有权限{$six}<br>";
} else {
    echo "删除six后验证没有权限{$six}<br>";
}

echo "当前权限{$user}";

输出结果

发表评论

邮箱地址不会被公开。 必填项已用*标注