Мне нравится играть в гольф dc
, но я иногда расстраиваюсь, потому что dc
у меня нет побитовых операций.
Вызов
Обеспечить четыре названные функции , которые реализуют эквивалент операций с поразрядными &
, |
, ~
и^
(побитовое AND, OR, NOT и XOR). Каждая функция принимает два операнда ( ~
занимает только один), которые представляют собой как минимум 32-разрядные целые числа без знака. Каждая функция будет возвращать целое число без знака той же битовой ширины, что и операнды.
ограничение
Вы можете использовать только те операции, которые поддерживаются dc
. Эти:
+
-
*
/
Арифметическое сложение, вычитание, умножение и деление~
по модулю (или divmod, если ваш язык поддерживает это)^
экспоненцирование|
модульное возведение в степеньv
квадратный корень>
>=
==
!=
<=
<
стандартные операторы равенства / неравенства>>
<<
операторы сдвига битов.dc
не имеет их, но так как они тривиально реализуются с точки зрения деления / умножения на степени 2, тогда я позволю это.
Управляющие структуры в dc
могут быть неуклюже построены с использованием (рекурсивных) макросов и (в) операций равенства. Вы можете использовать любые встроенные управляющие структуры вашего языка.
Вы также можете использовать логические операторы &&
||
!
, даже если они не доступны напрямую в dc
.
Вы не должны использовать операторы побитового &
, |
, ~
и ^
или любые функции , которые реализуют их тривиальными.
Кроме того, вы не должны использовать встроенные операторы или функции базового преобразования строк.
Также рассмотрите возможность предоставления тестовой программы или фрагмента онлайн-компилятора (не включенного в счет по гольфу), чтобы подтвердить свой ответ.