php - 我如何将几个确定的整数位设置为具体值?
问题描述
我正在尝试使用按位运算符对存储在整数中的权限进行一些工作,并且在尝试将几个确定的位设置为一行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
通过分析问题,我发现如何执行函数的第一部分,第二部分必须等于 $type when $value
istrue
和 to 0
when $value
is false
,但我不知道如何以最简单的方式做到这一点。
我提请您注意,参数$type
可以是任何整数,而不仅仅是 2 的幂。
解决方案
setPermission
您需要根据$value
是真还是假来执行不同的操作。您当前的代码仅实现了您想要清除权限 ( $value = false
) 的情况。
function setPermission(int $permissions, int $type, bool $value)
{
if ($value)
return $permissions | $type;
else
return $permissions & ~$type;
}
推荐阅读
- c# - 触摸物体时不检测
- javascript - 从标签中获取文本并将其放入数组中
- reactjs - 如何在下面的代码中添加扩展 React 组件部分?
- python - 为什么在 python 2.7 中出现 else 语句的语法错误?
- javascript - 设置匿名函数 TypeScript 的类型
- python - SQL - 从对应值与另一个选择语句的结果匹配的表中选择值
- java - 每个线程在 Java 中完成运行后如何运行任务?
- android - RecyclerView 中的 ViewBinding 以及 DiffUtils 回调不起作用
- python - 使用 M1 Mac 进行 Python 多处理
- java - 在Java SpringBoot中将枚举多个值转换为Json