我正在尝试使用按位运算符来处理存储在整数中的权限,并且一直试图在一行中将多个确定位设置为1
或0
。
我当前的代码是:
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
通过分析问题,我发现如何执行函数的第一部分,并且当$value
为true
时第二部分必须等于$ type,并且必须等于0
当$value
是false
时,但我不知道如何以最简单的方式做到这一点。
我引起您的注意,参数$type
可以是任何整数,而不仅仅是2的幂。
答案 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;
}