Mi piace giocare a golf dc, ma a volte sono frustrato perché dcnon 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 modularevradice quadrata>>===!=<=<operatori di uguaglianza / disuguaglianza standard>><<operatori bit shift.dcnon 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 dcmio 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.