Mi piace giocare a golf dc
, ma a volte sono frustrato perché dc
non ha operazioni bit per bit.
Sfida
Fornire quattro funzioni denominate che implementano l'equivalente delle operazioni c bit per bit &
, |
, ~
e ^
(bit AND, OR, NOT e XOR). Ogni funzione prenderà due operandi (ne ~
accetta solo uno) che sono numeri interi senza segno di almeno 32 bit. Ogni funzione restituirà un numero intero senza segno della stessa larghezza di bit degli operandi.
Restrizione
È possibile utilizzare solo operazioni supportate da dc
. Questi sono:
+
-
*
/
Aggiunta, sottrazione, moltiplicazione e divisione aritmetica~
modulo (o divmod se la tua lingua lo supporta)^
elevamento a potenza|
esponenziazione modularev
radice quadrata>
>=
==
!=
<=
<
operatori di uguaglianza / disuguaglianza standard>>
<<
operatori bit shift.dc
non ha questi, ma dal momento che sono banalmente implementati in termini di divisione / moltiplicazione per potenze di 2, allora li permetterò.
Le strutture di controllo nel dc
mio devono essere costruite goffamente usando macro (ricorsive) e operazioni (in) di uguaglianza. Puoi usare qualsiasi struttura di controllo integrata nella tua lingua.
È inoltre possibile utilizzare operatori logici &&
||
!
, anche se questi non sono direttamente disponibili in dc
.
È necessario non utilizzare gli operatori bit per bit &
, |
, ~
e ^
o qualsiasi funzioni che banalmente li implementano.
Inoltre, non è necessario utilizzare operatori o funzioni di conversione di stringhe di base incorporati.
Considera anche di fornire un programma di test o uno snippet di compilatore online (non incluso nel punteggio del golf) per verificare la tua risposta.