目次
1. Introducción
Resumen de las operaciones de bits en C
El lenguaje C ofrece operaciones de bits para manejar la memoria y el procesador de manera eficiente. Entre ellas, la más importante es el XOR (OR exclusivo). Las operaciones de bits se utilizan habitualmente en diversas situaciones, como la encriptación de datos, la verificación de datos y la manipulación numérica. El XOR tiene la característica de devolver «1» cuando dos bits son diferentes y «0» cuando son iguales, y es conocido como una operación simple pero poderosa. En este artículo, se explica paso a paso desde los fundamentos hasta las aplicaciones del XOR en C. Se incluyen ejemplos de código reales y está estructurado para que incluso los principiantes lo comprendan fácilmente.2. Fundamentos del operador XOR
¿Qué es XOR?
XOR (disyunción exclusiva) compara dos valores bit a bit y devuelve “1” cuando los bits son diferentes y “0” cuando son iguales. Por ejemplo, al comparar los bits de los números 5 y 9 como se muestra a continuación, se obtiene el resultado de la operación XOR.- Binario de 5:
0101
- Binario de 9:
1001
Posición de bit | 5 (0101) | 9 (1001) | Resultado XOR |
---|---|---|---|
1 | 0 | 1 | 1 |
2 | 1 | 0 | 1 |
3 | 0 | 0 | 0 |
4 | 1 | 1 | 0 |
1100
, que en decimal corresponde a “12”. Comprender el funcionamiento básico de esta operación XOR permite aplicarla a operaciones de bits más complejas.3. Comprender XOR con código de ejemplo
Ejemplo básico de uso de XOR
A continuación se muestra un ejemplo sencillo de cómo ejecutar una operación XOR en C. Este código realiza la operación XOR con los valores 5 y 9 y muestra el resultado.#include <stdio.h>
int main() {
int a = 5;
int b = 9;
int result = a ^ b;
printf("5 XOR 9 = %dn", result); // El resultado es 12
return 0;
}
Este código calcula el XOR bit a bit de los valores a
y b
, y almacena el resultado en result
. Al ejecutarlo, muestra «5 XOR 9 = 12». Es un buen ejemplo para comprender visualmente las operaciones a nivel de bits.4. Ejemplos de aplicación del XOR
Intercambio de valores de variables usando XOR
Al aprovechar la característica única del XOR, se pueden intercambiar los valores de dos variables sin usar una variable temporal. El siguiente código muestra cómo intercambiar los valores de las dos variablesa
y b
usando XOR.#include <stdio.h>
int main() {
int a = 5;
int b = 7;
printf("Before swap: a = %d, b = %dn", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("After swap: a = %d, b = %dn", a, b);
return 0;
}
En este código, al usar XOR tres veces, se intercambian de manera eficiente los valores de a
y b
. De este modo, es posible cambiar los valores sin una variable temporal, lo que ayuda a ahorrar memoria.
5. Ejemplos prácticos y áreas de aplicación
Detección de números duplicados y números que aparecen un número impar de veces en un arreglo
XOR también puede detectar de manera eficiente los elementos duplicados o los que aparecen un número impar de veces en un arreglo. A continuación se muestra un ejemplo para detectar elementos duplicados y código para encontrar los que aparecen un número impar de veces.Descubrimiento de números duplicados
#include <stdio.h>
int findDuplicate(int nums[], int size) {
int duplicate = 0;
for (int i = 0; i < size; i++) {
duplicate ^= nums[i];
}
return duplicate;
}
int main() {
int nums[] = {1, 2, 3, 2, 4};
int size = sizeof(nums) / sizeof(nums[0]);
printf("El número duplicado es: %dn", findDuplicate(nums, size));
return 0;
}
En este código, se usa XOR para detectar los valores duplicados en el arreglo. Aprovechando la propiedad de XOR, al aplicar XOR dos veces al mismo número se obtiene 0, dejando solo los valores duplicados en el resultado.Detección de números que aparecen un número impar de veces
#include <stdio.h>
int findOddOccurrence(int nums[], int size) {
int result = 0;
for (int i = 0; i < size; i++) {
result ^= nums[i];
}
return result;
}
int main() {
int nums[] = {5, 3, 9, 3, 5, 9, 7};
int size = sizeof(nums) / sizeof(nums[0]);
printf("El número con aparición impar es: %dn", findOddOccurrence(nums, size));
return 0;
}
En este código, solo los números que aparecen un número impar de veces permanecen en el resultado final de XOR, lo que permite detectarlos fácilmente.Uso de XOR en la encriptación de datos
XOR también se utiliza para la encriptación de datos. El siguiente código muestra un ejemplo sencillo de cifrado y descifrado usando XOR.#include <stdio.h>
void encryptDecrypt(char data[], char key) {
for (int i = 0; data[i] != '�'; i++) {
data[i] = data[i] ^ key;
}
}
int main() {
char data[] = "Hello World";
char key = 'K';
printf("Original: %sn", data);
encryptDecrypt(data, key);
printf("Cifrado: %sn", data);
encryptDecrypt(data, key);
printf("Descifrado: %sn", data);
return 0;
}
En este código, al aplicar la operación XOR a los datos se realiza el cifrado y descifrado. Al volver a aplicar XOR, los datos vuelven a su forma original, por lo que se utiliza como una técnica de cifrado simple.