4 votos

¿Cómo puedo resolver ecuaciones simples con operadores binarios?

Tengo algunas ecuaciones simples como:

 A = (X AND 1779038349) XOR ((X AND 3144134329) XOR 7047511487)
 

Donde A es una constante y X es desconocida (todos los números son enteros sin signo de 32 bits).

¿Cómo puedo resolver esto para X?

3voto

Berci Puntos 42654

Como el $x\mapsto x{\,\rm xor\,}s$ es el inverso de sí mismo por todos los $s$, ${\rm and}$ es distributiva sobre ${\rm xor}$, e ${\rm xor}$ es asociativa, obtenemos

$\begin{align} A{\,\rm xor\,} 7047511487 &= X{\,\rm and\,}(1779038349{\,\rm xor\,}3144134329) \\ A' &= X{\,\rm and\,}3513669172 = X{\,\rm and\,}0b11010001011011100101011000110100 \end{align}$

donde $A'$ es otra constante ($A'=A{\,\rm xor\,} 7047511487$). Así, obtenemos una solución si la constante de $A'$ no tiene ningún dígito $1$ en binario, donde la derecha ha $0$ dígitos, y en ese caso, en estos lugares $X$ puede ser arbitraria. En otras palabras, $X$ es enmascarado por los bits de 3513669172 anterior, y en caso de que contenga $0$, $X$ puede ser arbitraria, cuando contiene $1$, el dígito de $X$ tiene que ser el mismo que el dígito en el mismo lugar en $A'$ (de la derecha).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X