Me gusta jugar golf dc
, pero a veces estoy frustrado porque dc
no tiene operaciones bit a bit.
Desafío
Proporcionar cuatro funciones con nombre que implementan el equivalente de las operaciones c bit a bit &
, |
, ~
y ^
(bitwise AND, OR, NOT y XOR). Cada función tomará dos operandos ( ~
toma solo uno) que son al menos enteros sin signo de 32 bits. Cada función devolverá un entero sin signo del mismo ancho de bits que los operandos.
Restricción
Solo puede usar operaciones compatibles con dc
. Estos son:
+
-
*
/
Suma, resta, multiplicación y división aritmética~
módulo (o divmod si su idioma lo admite)^
exponenciación|
exponenciación modularv
raíz cuadrada>
>=
==
!=
<=
<
operadores estándar de igualdad / desigualdad>>
<<
operadores de desplazamiento de bits.dc
no tiene estos, pero dado que se implementan trivialmente en términos de división / multiplicación por potencias de 2, entonces permitiré estos.
Las estructuras de control en dc
mi se pueden construir torpemente usando macros (recursivas) y operaciones de (in) igualdad. Puede usar cualquier estructura de control incorporada que tenga su idioma.
También puede usar operadores lógicos &&
||
!
, aunque estos no estén disponibles directamente en dc
.
Usted no debe utilizar los operadores bit a bit &
, |
, ~
y ^
o las funciones que implementan trivialmente ellos.
Además, no debe utilizar operadores o funciones integrados de conversión de cadenas de base.
También considere proporcionar un programa de prueba o un fragmento de compilador en línea (no incluido en el puntaje de golf) para ayudar a verificar su respuesta.