(Я предполагаю mask == 0x8, если X == true, и mask == ~0x8, если X == false, иначе ваш оператор не будет соответствовать вашему коду.)
Чтобы использовать «только побитовые операции», вам нужно будет преобразовать это логическое значение в число.
Поскольку вы не указали язык программирования, я предполагаю, что вы ищете общий/концептуальный ответ.
Однако , возможно это или нет, зависит от особенностей вашего языка программирования, а именно от возможности трактовать логические значения как числа.
Например, в JavaScript это можно сделать так
function applyBoolean(myBinary, X)
{
return (myBinary & ~0x8) ^ (X << 3);
}
Логика этого относительно проста:
- Установите бит
0x8 в 0 (побитовое И с побитовой инверсией 0x8).
- Сдвинуть
X на 3 бита влево, неявно преобразовав его в число.
- XOR
myBinary с этим значением, в результате чего бит 0x8 становится 0 для X == false и 1 для X == true.
В PHP это практически то же самое:
function applyBoolean($myBinary, $X)
{
return ($myBinary & ~0x8) ^ ($X << 3);
}
В Java это вообще нельзя сделать, используя только побитовые операторы, так как boolean нельзя преобразовать в число. Вам придется использовать if, тернарный оператор или функцию.
В некоторых языках, таких как ассемблер и C до C99, это может считаться неприменимым, поскольку в этих языках отсутствует (настоящий) логический тип.
Однако, если 0 и 1 считаются логическими, решение столь же тривиально, как переписывание фрагмент выше на этих языках.
И последнее (и, вероятно, не менее важное), в некоторых языках, таких как Brainfuck, просто отсутствуют логические операторы, что делает эту задачу невыполнимой.
person
Siguza
schedule
26.06.2015
apply the boolean value X to ... myBinary, но не продемонстрировали этого в образцеI know I can do it this way. Вы действительно хотите рассматриватьxкак двоичное значение1000(8)? Я думаю, мы могли бы использовать немного больше объяснений того, чего вы пытаетесь достичь. Предоставьте образцы входных данных для вашей функцииapplyBooleanи ожидаемые результаты. - person Cᴏʀʏ   schedule 26.06.2015