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