我如何将整数的几个确定位设置为具体值?

时间:2018-12-29 23:29:38

标签: php binary bit-manipulation bitwise-operators

我正在尝试使用按位运算符来处理存储在整数中的权限,并且一直试图在一行中将多个确定位设置为10

我当前的代码是:

function setPermission(int $permissions, int $type, bool $value)
{
    return ($permissions & ~$type) | /* There is what i don't know how to do */;
}

echo setPermission(2|4|16, 4|8,    false); // 2|16
echo setPermission(2|4|16, 4|8,    true ); // 2|4|8|16
echo setPermission(1|2|4,  4|8|16, false); // 1|2

通过分析问题,我发现如何执行函数的第一部分,并且当$valuetrue时第二部分必须等于$ type,并且必须等于0$valuefalse时,但我不知道如何以最简单的方式做到这一点。

我引起您的注意,参数$type可以是任何整数,而不仅仅是2的幂。

1 个答案:

答案 0 :(得分:1)

您需要根据setPermission是true还是false,在$value中执行其他操作。您当前的代码仅实现您要清除权限($value = false)的情况。

function setPermission(int $permissions, int $type, bool $value)
{
    if ($value)
        return $permissions | $type;
    else
        return $permissions & ~$type;
}

Demo on 3v4l.org