以整数形式存储和解码“二进制”中的值

时间:2018-08-09 21:47:56

标签: php math

下面的系统如何调用?在以下情况下实现解码功能的简单算法是什么?

想象一下,我们有一个具有以下值的权限系统。每个权限节点都会获得一个具有以下规则的数字:

  • READ = 1
  • CREATE = 2
  • UPDATE = 4
  • 删除= 8

为了澄清:我将许可本身称为权限,为其分配的编号称为。另外,我将所有的总和称为级别

当我想给用户三个权限 READ CREATE UPDATE 时,他的权限为7。我可以肯定地说这7位用户具有这3个角色。

我的问题是:该系统如何命名,什么情况下可以计算得出,这意味着:如何有效地找出7由1、2和4组成,或者a 13级是由1、4和8构成的吗?我完全不知道从哪里开始。

1 个答案:

答案 0 :(得分:2)

这称为位图位掩码。当用于存储权限时,它称为权限掩码

要测试是否设置了特定值,可以使用按位运算符。

$mask = 7;
$perms = array();
if ($mask & READ) {
    $perms[] = "READ";
}
if ($mask & CREATE) {
    $perms[] = "CREATE";
}
if ($mask & UPDATE) {
    $perms[] = "UPDATE";
}
if ($mask & DELETE) {
    $perms[] = "DELETE";
}
echo "Permissions are: " . implode(", ", $perms); // prints READ, CREATE, UPDATE