Как я могу установить несколько определенных битов целого числа для конкретных значений?

Я пытаюсь выполнить некоторую работу с разрешениями, хранящимися в целых числах, используя побитовые операторы, и застрял, пытаясь установить несколько определенных битов в 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 может быть любым целым числом, а не только степенью двойки.

0

Решение

Вам нужно выполнить другую операцию в setPermission зависит от того, $value это правда или ложь. Ваш текущий код реализует только тот случай, когда вы хотите очистить разрешения ($value = false).

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

Демо на 3v4l.org

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector