2012-04-23 23 views
5

Para ser sincero, estoy oxidado en las operaciones de bits.
Lo que me interesa es la operación XOR. Bien, sé lo que hace a nivel de bit, y que se usa en encriptación y que podemos intercambiar sin ninguna variable temporal, pero me interesaba si había enfoques específicos en los algoritmos que encajan las propiedades de XOR.
Es decir, estoy interesado en aplicaciones prácticas de XOR en algoritmos (por ejemplo, podríamos usarlo para encontrar un elemento único entre los duplicados). ¿Hay un patrón de problemas (o una formulación de un problema) que uno puede ver que el uso de XOR es el camino a seguir? (¿Igual que hay un patrón cuando usar la búsqueda binaria?)
¿Hay alguna lista de aplicaciones prácticas de XOR en algoritmos que estén relacionados con el algoritmo central, no simplemente usarlo, p. hacer operaciones matemáticas más rápido que podemos utilizar >> en lugar de dividir por 2.Cuáles son algunas aplicaciones prácticas de XOR en los algoritmos

Cualquier entrada es bienvenido

+3

Bueno, cualquier otro algoritmo hash (incluidos los no criptográficos) utiliza XOR en un lugar u otro. ¿Eso cuenta, o todavía es "solo un juego de bits"? – delnan

+0

Estaba saltando algo a lo largo de la línea de la mejor manera de resolver un problema. Como cuando intentas encontrar uno único entre los duplicados, puedes usar una tabla hash pero puedes hacerlo sin espacio extra con 'XOR' ya que los duplicados se cancelan – Cratylus

+5

** Una de las preguntas más importantes en la web y está cerrada .... ** –

Respuesta

8

Unos pocos ejemplos que surgieron en mi mente:

bits de Conmutación:

int i = 123; 
i ^= (1 << 4); // toggle bit 5 

Algún tipo de aleatoriedad:

int i = 123; 
for (int k = 0; k < 100; k++) 
{ 
    i = i^(i << 1) + i; 
    System.out.println(i); 
} 

"débil Cifrado ":

int b = 235321; 
int key = 24552; 
int encrypted = b^key; 
int decrypted = encrypted^key; // equals 235321 
+0

Es exactamente por eso que escribí "débil". –

+3

BTW, el último se puede extender al cifrado de texto sin formato fácilmente (solo necesita una codificación). * Si * la clave es aleatoria y tan larga como la entrada, en realidad es una [cifra bastante buena] (http://en.wikipedia.org/wiki/One-time_pad) porque es imposible agrietar (sin saber ni la clave ni Texto sin formato). Si la clave es más corta (y por lo tanto se repite para ajustarse a la longitud de la entrada), se puede descifrar fácilmente (bueno, es fácil para un experto): el único problema restante es crear una almohadilla de una sola vez y llevársela a Bob. Cryptographics es fascinante. – delnan

Cuestiones relacionadas