J'aime jouer au golf dc
, mais je suis parfois frustré car je n'ai dc
pas d'opérations au niveau du bit.
Défi
Fournir quatre fonctions nommées qui mettent en œuvre l'équivalent des c opérations binaires &
, |
, ~
et ^
( au niveau du bit, OR, NOT et XOR). Chaque fonction prendra deux opérandes ( ~
n'en prend qu'un) qui sont des entiers non signés d'au moins 32 bits. Chaque fonction renverra un entier non signé de la même largeur de bits que les opérandes.
Restriction
Vous ne pouvez utiliser que des opérations prises en charge par dc
. Ceux-ci sont:
+
-
*
/
Addition, soustraction, multiplication et division arithmétiques~
modulo (ou divmod si votre langue le prend en charge)^
exponentiation|
exponentiation modulairev
racine carrée>
>=
==
!=
<=
<
opérateurs standard d'égalité / inégalité>>
<<
opérateurs de décalage de bits.dc
n'a pas ces derniers, mais comme ils sont trivialement mis en œuvre en termes de division / multiplication par des puissances de 2, alors je les autoriserai.
Les structures de contrôle dc
peuvent être maladroitement construites à l'aide de macros (récursives) et d'opérations (in) d'égalité. Vous pouvez utiliser toutes les structures de contrôle intégrées de votre langue.
Vous pouvez également utiliser des opérateurs logiques &&
||
!
, même s'ils ne sont pas directement disponibles dans dc
.
Vous ne devez pas utiliser les opérateurs binaires &
, |
, ~
et ^
ou toutes les fonctions qui les mettent en œuvre trivialement.
De plus, vous ne devez pas utiliser d'opérateurs ou de fonctions de conversion de chaîne de base intégrés.
Veuillez également envisager de fournir un programme de test ou un extrait de compilateur en ligne (non inclus dans le score de golf) pour aider à vérifier votre réponse.