首页 > 解决方案 > 我如何将几个确定的整数位设置为具体值?

问题描述

我正在尝试使用按位运算符对存储在整数中的权限进行一些工作,并且在尝试将几个确定的位设置为一行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

通过分析问题,我发现如何执行函数的第一部分,第二部分必须等于 $type when $valueistrue和 to 0when $valueis false,但我不知道如何以最简单的方式做到这一点。

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

标签: phpbinarybit-manipulationbitwise-operators

解决方案


setPermission您需要根据$value是真还是假来执行不同的操作。您当前的代码仅实现了您想要清除权限 ( $value = false) 的情况。

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

3v4l.org 上的演示


推荐阅读