Я пытаюсь выполнить некоторую работу с разрешениями, хранящимися в целых числах, используя побитовые операторы, и застрял, пытаясь установить несколько определенных битов в 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, когда $value
является true
и к 0
когда $value
является false
, но я не знаю, как это сделать проще всего.
Обращаю ваше внимание, что параметр $type
может быть любым целым числом, а не только степенью двойки.
Вам нужно выполнить другую операцию в setPermission
зависит от того, $value
это правда или ложь. Ваш текущий код реализует только тот случай, когда вы хотите очистить разрешения ($value = false
).
function setPermission(int $permissions, int $type, bool $value)
{
if ($value)
return $permissions | $type;
else
return $permissions & ~$type;
}
Других решений пока нет …