Eu gosto de jogar golfe dc
, mas às vezes fico frustrado porque dc
não tem operações bit a bit.
Desafio
Fornecer quatro funções nomeadas que implementam o equivalente das operações c bit a bit &
, |
, ~
e ^
(bit a bit AND, OR, NOT e XOR). Cada função aceita dois operandos ( ~
usa apenas um) que são, pelo menos, números inteiros não assinados de 32 bits. Cada função retornará um número inteiro não assinado da mesma largura de bit que os operandos.
Restrição
Você só pode usar operações suportadas por dc
. Esses são:
+
-
*
/
Adição, subtração, multiplicação e divisão aritmética~
módulo (ou divmod, se o seu idioma suportar)^
exponenciação|
exponenciação modularv
raiz quadrada>
>=
==
!=
<=
<
operadores padrão de igualdade / desigualdade>>
<<
operadores de troca de bits.dc
não os possui, mas, como eles são implementados trivialmente em termos de divisão / multiplicação por potências de 2, então permitirei.
Estruturas de controle no dc
meu ser desajeitadamente construídas usando macros (recursivas) e (in) operações de igualdade. Você pode usar qualquer estrutura de controle interna que seu idioma tiver.
Você também pode usar operadores lógicos &&
||
!
, mesmo que eles não estejam diretamente disponíveis no dc
.
Você não deve usar os operadores bit a bit &
, |
, ~
e ^
ou quaisquer funções que trivialmente implementá-las.
Além disso, você não deve usar operadores ou funções integradas de conversão de cadeia de caracteres.
Considere também fornecer um programa de teste ou um trecho do compilador on-line (não incluído na pontuação do golfe) para ajudar a verificar sua resposta.