Ich spiele gerne Golf dc
, bin aber manchmal frustriert, weil ich dc
keine bitweisen Operationen habe.
Herausforderung
Geben Sie vier genannten Funktionen , die das Äquivalent der c bitweise Operationen implementieren &
, |
, ~
und ^
(bitweise AND, OR, NOT und XOR). Jede Funktion benötigt zwei Operanden ( ~
nur einen), bei denen es sich um mindestens 32-Bit-Ganzzahlen ohne Vorzeichen handelt. Jede Funktion gibt eine ganze Zahl ohne Vorzeichen mit derselben Bitbreite wie die Operanden zurück.
Beschränkung
Sie dürfen nur Operationen verwenden, die von unterstützt werden dc
. Diese sind:
+
-
*
/
Arithmetische Addition, Subtraktion, Multiplikation und Division~
modulo (oder divmod wenn deine Sprache es unterstützt)^
Potenzierung|
modulare Potenzierungv
Quadratwurzel>
>=
==
!=
<=
<
Standard-Gleichheits- / Ungleichheitsoperatoren>>
<<
Bit-Shift-Operatoren.dc
habe diese nicht, aber da sie in Bezug auf Division / Multiplikation durch Potenzen von 2 trivial implementiert sind, werde ich diese zulassen.
Kontrollstrukturen lassen dc
sich mit (rekursiven) Makros und (in) Gleichheitsoperationen ungeschickt aufbauen. Sie können die in Ihrer Sprache integrierten Kontrollstrukturen verwenden.
Sie können auch logische Operatoren verwenden &&
||
!
, obwohl diese in nicht direkt verfügbar sind dc
.
Sie müssen nicht die Bit - Operatoren verwenden &
, |
, ~
und ^
oder alle Funktionen , die sie triviale implementieren.
Außerdem dürfen Sie keine eingebauten Basisumwandlungsoperatoren oder -funktionen verwenden.
Bitte geben Sie auch ein Testprogramm oder ein Online-Compiler-Snippet an (nicht im Golf-Score enthalten), um Ihre Antwort zu überprüfen.