【发布时间】:2019-05-27 04:48:27
【问题描述】:
我正在尝试使用按位运算符对存储在整数中的权限进行一些工作,但尝试在一行中将几个确定的位设置为 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,当$value 为@ 时,第二个必须等于0 987654329@,但我不知道如何以最简单的方式做到这一点。
请注意,参数 $type 可以是任何整数,而不仅仅是 2 的幂。
【问题讨论】:
-
已编辑,在最后一段中我指出了不同之处
-
凭借您的鬼才,您应该很容易理解每个位的操作独立于其他位...因此,无论您设置一个位还是多个位都没有区别。
-
我觉得你说的不对。
$number = ($number & ~(1 << $n)) | ($new_bit << $n)至少对我不起作用,因为当$type不是 2 的幂时,没有有效的$n。
标签: php binary bit-manipulation bitwise-operators