¿Cuál es la interpretación de XOR de los enteros? ¿Hay alguna forma simple de calcular XOR en lugar de ‘XOR-ing’ todos los bits individuales?

Respuesta corta, XOR siempre se define en términos de dígitos binarios (o algunas nociones equivalentes, como declaraciones verdaderas o falsas). No existe un XOR especial para enteros que no sea el XOR de los bits correspondientes de sus representaciones binarias.

Y para responder a la segunda parte de la pregunta, el XOR de los bits correspondientes es la forma más simple, ya que el procesador tendrá una instrucción (llamada, por ejemplo, XOR ) que puede XOR los bits correspondientes de dos valores enteros de tamaños fijos (digamos 16 bits , 32 bits o 64 bits, dependiendo del procesador) de una vez.

El compilador usará esta instrucción si declaramos dos int s o long ints y los XOR usando cualquier operador incorporado (^ en C, C ++, Java, etc.). Esta instrucción en realidad será más rápida que las instrucciones que realizan operaciones aritméticas como la suma de enteros. De hecho, en los días de la programación en lenguaje ensamblador, XORing un valor de registro consigo mismo se usaba como una forma rápida de borrar el registro (en lugar de una instrucción MOVE) en algunas arquitecturas de procesador.

Como dije antes, las diversas formas de ver XOR implican dígitos binarios o algunas nociones equivalentes. Algunos de estos incluyen:

1) Sea A y B dos proposiciones (declaraciones que pueden ser verdaderas o falsas). A xor B es verdadero si A o B son verdaderos, pero no ambos. Esta es la vista de OR exclusivo en lógica matemática.

Este uso aclara la ambigüedad en el idioma inglés de usar solo “o” cuando el significado real es este tipo de “exclusivo o”. Por ejemplo, en la oración, “Un estudiante puede tomar Matemáticas o Ciencias de la Computación”. , el significado implícito suele ser que un estudiante puede tomar Matemáticas o Ciencias de la Computación, pero no ambas. El sentido de la palabra o es realmente OR exclusivo, no el OR habitual en lógica.

2) Sea A y B dos variables booleanas, y sea XOR una función booleana que tome dos variables booleanas. [matemática] A \ oplus B = 1 [/ matemática] si A = 0 y B = 1 o A = 1 y B = 0 (es decir, son diferentes), y [matemática] A \ oplus B = 0 [/ matemática ] si A = 0 y B = 0 o A = 1 y B = 1 (es decir, son similares). Esta es la vista de álgebra booleana.

Esto se puede expresar usando una tabla de verdad, o simbólicamente como [math] A \ oplus B = AB ‘+ A’B [/ math]. Aquí, los dos términos (conocidos como minterms ) representan los dos casos donde la función [math] A \ oplus B [/ math] es 1.

3) Sea A y B dos números enteros módulo 2 (es decir, A y B pueden ser 0 o 1). Entonces A xor B es la suma de A y B módulo 2 . A xor B también se puede ver como la diferencia de A y B módulo 2 .

Para ver cómo funciona esto, considere el caso de agregar A y B módulo 2:
Si A = 0 y B = 0, la suma = 0, cuyo módulo 2 es 0 en sí mismo.
Si A = 0 y B = 1, la suma = 1, cuyo módulo 2 es 1 en sí.
Si A = 1 y B = 0, la suma = 1, cuyo módulo 2 es 1 en sí.
Si A = 1 y B = 1, la suma = 2, cuyo módulo 2 es 0 (para decirlo formalmente, 2 es congruente con 0 módulo 2, ya que el resto de dividir 2 por el módulo 2 es 0).

De manera similar, puede ver cómo la diferencia de A y B módulo 2 es equivalente a la operación XOR (teniendo en cuenta que -1 módulo 2 es 1, o para decirlo de manera más formal, -1 es congruente con 1 módulo 2 )

En algunos algoritmos, por ejemplo, el algoritmo de cifrado / descifrado AES, la operación XOR se usa en este sentido matemático de módulo de suma y resta 2.

Como han señalado otras respuestas, XOR se define sobre bits o que puede interpretarse como una suma en GF (2), pero voy a responder una pregunta ligeramente diferente:

¿Existe una analogía de XOR que se pueda aplicar a los dígitos?

Algo así como el módulo 10 de suma dígito a dígito tendría algunas de las propiedades de XOR. Si tiene un número entero como 3141592654 y otro 2718281828, puede hacer aritmética dígito por dígito mod 10. Comenzando con los dígitos menos significativos que obtenemos

4 + 8 = 2, 5 + 2 = 7, 6 + 8 = 4, 2 + 1 = 3, 9 + 8 = 7, 5 + 1 = 6, 1 + 8 = 9, 4 + 1, 1 + 7 = 8, 3 +2, 5.

Entonces el resultado sería 589673472.

Esto le proporciona algunas de las propiedades de XOR. Llamemos a esto “MTA” (adición de mod diez). MTA es conmutativo (A MTA B = B MTA A) y asociativo (A MTA (B MTA C) = (A MTA B) MTA C). Y se puede realizar dígito a dígito. Hay un elemento cero, 0, de modo que A MTA 0 = A. Entonces, quizás eso es todo lo que necesita.

Pero con XOR cada elemento es su propio inverso. Eso es A XOR A = 0, para cualquier A. Esta es una de las cosas que hace que XOR sea tan útil. Pero esto no es cierto para MTA. Por ejemplo 2 MTA 2 = 4.

Puede interpretar XOR como suma en un campo de orden de Galois “suficientemente grande” [matemática] 2 ^ n [/ matemática]. o como adicional de polinomios con coeficientes binarios. Esto, desafortunadamente, no conduce a ningún atajo, como demostraré, pero proporciona una interpretación que surge con frecuencia en la criptografía y los registros de desplazamiento de retroalimentación lineal.

Un campo de Galois es un campo finito. Esto significa que tiene suma, inversos aditivos, multiplicación e inversos multiplicativos al igual que los números racionales o los números reales. Pero solo tiene un número finito de elementos.

GF (2) tiene solo dos elementos: 0 y 1. Los agregamos con las reglas

[matemáticas] 0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 0 [/ matemáticas]

y multiplícalos con las reglas

[matemáticas] 0 \ veces 0 = 0, 0 \ veces 1 = 0, 1 \ veces 0 = 0, 1 \ veces 1 = 1 [/ matemáticas]

La regla de la adición se puede considerar de dos maneras, ya sea como módulo de adición 2 o como XOR. GF (2) se comporta como un bit con XOR como su adición y AND como su multiplicación.

¿Qué sucede si damos coeficientes polinomiales de GF (2)? Luego agregarlos es como un XOR multibit. Por ejemplo,

[matemáticas] (x ^ 3 + x ^ 2 + 1) + (x ^ 2 + x +1) = x ^ 3 + x [/ matemáticas]

al igual que

1101 XOR 0111 = 1010

Podemos ir un paso más allá y convertir estos polinomios en un campo para cualquier [matemática] n [/ matemática] tomándolos módulo un polinomio irreducible de grado [matemático] n [/ matemático]. Esto da como resultado el campo finito GF ([matemática] 2 ^ n [/ matemática]). Por ejemplo, para [matemáticas] n = 4 [/ matemáticas], un polinomio irreducible es [matemáticas] x ^ 4 + x + 1 [/ matemáticas]

Podemos asignar un número entero a su representación en GF ([matemática] 2 ^ n [/ matemática]) a través de su representación binaria, y luego XOR es “simplemente” la operación de suma en ese campo. La multiplicación corresponde a un cambio y XOR. Entonces, en su ejemplo, [matemática] 10 [/ matemática] y [matemática] 15 [/ matemática] corresponden a los polinomios [matemática] x ^ 3 + x [/ matemática] (1010) y [matemática] x ^ 3 + x ^ 2 + x + 1 [/ matemáticas] (1111) en el campo finito GF ([matemáticas] 2 ^ 4 [/ matemáticas])

Cuando sumamos estos dos, obtenemos [matemáticas] 2x ^ 3 + x ^ 2 + 2x + 1 [/ matemáticas]. Pero recuerde que los coeficientes están en GF (2), entonces 1 + 1 = 0, no 2, y obtenemos [matemática] x ^ 2 + 1 [/ matemática] (0101). Traducir eso de nuevo a un entero da 5.

¿Qué pasa si los multiplicamos? Obtenemos

[matemáticas] x ^ 6 + x ^ 5 + x ^ 4 + x ^ 3 + x ^ 4 + x ^ 3 + x ^ 2 + x = x ^ 6 + x ^ 5 + x ^ 2 + x [/ matemáticas]

luego dividir por el polinomio irreducible [matemática] x ^ 4 + x + 1 [/ matemática] identificado anteriormente nos da

[matemáticas] x ^ 6 + x ^ 5 + x ^ 2 + x = (x ^ 2 + x) (x ^ 4 + x + 1) + (x ^ 3 + x ^ 2) [/ matemáticas]

entonces, tomando el resto (recuerde, estamos haciendo aritmética modular en los polinomios), el resultado de nuestra multiplicación es [matemáticas] x ^ 3 + x ^ 2 [/ matemáticas], es decir, [matemáticas] 10 \ veces 5 = 6 [/mates]! Al menos cuando se trabaja en esta representación particular de GF ([matemáticas] 2 ^ 4 [/ matemáticas])

Esta es una interpretación “no estándar” de los números, no como los enteros habituales, sino como elementos de estos campos especiales de Galois. Bajo esta interpretación, XOR es suma y la complicada operación que mostré es multiplicación. Pero, como sin duda notó, el mapeo entre los dos hace uso de la representación binaria de los números y, por lo tanto, no proporciona ningún acceso directo para calcular XOR.

Ver https://engineering.purdue.edu/k