Tutorial de Programación en C para Linux – Parte 14 – Ejemplos prácticos de operadores bit a bit
En uno de nuestros artículos anteriores, tratamos los conceptos básicos de los operadores bit a bit. Espero que hayas leído ese artículo y que ahora estés preparado para presenciar y comprender algunos ejemplos prácticos de uso de estos operadores. Así que, sin más preámbulos, empecemos.
1. Intercambiar los valores de dos variables
Seguro que conoces la lógica para intercambiar los valores de dos variables. Consiste en tomar una tercera variable para almacenar temporalmente un valor y luego asignar ese valor a una de las variables (cuyo valor original ya se ha asignado a la otra variable).
Por ejemplo, si «a» y «b» son variables cuyos valores hay que intercambiar, y «c» es la variable temporal, la lógica estándar es la siguiente:
c = a; a = b; b = c;
¿Pero sabías que todo este proceso de intercambio se puede hacer mediante operadores bit a bit? Sí, es cierto, y la lógica, en ese caso, ni siquiera requiere una tercera variable. Éste es el código:
#include <stdio.h>
int main()
{
int a, b;
printf(«Enter first number: «);
scanf(«%d», &a);
printf(«Enter second number: «);
scanf(«%d», &b);
printf(«As per your input, a = %d, and b = %d», a,b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf(«\nAfter swapping, a = %d, and b = %d», a,b);
return 0;
}
Este es el resultado:
Enter first number: 7 Enter second number: 2 As per your input, a = 7, and b = 2 After swapping, a = 2, and b = 7
2. Comprobar el número de «1» binarios de un número
A veces puedes encontrarte en una situación en la que necesites contar el número de bits con valor «1» en un número. Te alegrará saber que puedes hacerlo fácilmente utilizando operadores bit a bit. Ésta es la lógica:
#include <stdio.h>
int main()
{
int a, num_of_bits = 0;
printf(«Enter a number: «);
scanf(«%d», &a);
while(a)
{
if(a & 1)
num_of_bits++;
a = a >> 1;
}
printf(«\nNumber of binary 1s in this number is %d», num_of_bits);
return 0;
}
Aquí está la salida:
Enter a number: 5
Number of binary 1s in this number is 2
3. Programa en C para comprobar si una posición de bit dada es 1 o no
A veces, sobre todo cuando trabajas en un código relacionado con redes informáticas (protocolos, etc.), es necesario que compruebes si una determinada posición de bit es 1 o no. Esto se puede hacer fácilmente utilizando operadores bit a bit.
Este es el código:
#include <stdio.h>
int main()
{
int num, position, temp;
printf(«Enter a number: «);
scanf(«%d», &num);
printf(«Enter the bit position (keeping zero as base index and 31 as max): «);
scanf(«%d», &position);
if(((num>>position)&1) == 1)
printf(«\nBit at the position is 1»);
else
printf(«\nBit at the position is 0»);
return 0;
}
Este es el resultado:
Enter a number: 2 Enter the bit position (keeping zero as base index and 31 as max): 3
Bit at the position is 0
4. Convertir un número decimal a su forma binaria
Los operadores bit a bit también se pueden utilizar para convertir un número decimal a su forma binaria. Aquí tienes una lógica para ello:
#include <stdio.h>
int main()
{
int num, i = 0, temp = 0;
int bin[32] = {0}; // this will initialize all array elements to 0
/* Input number from user */
printf(«Enter any number: «);
scanf(«%d», &num);
for(i =31; i>=0; i–)
{
if((num & 1) == 1)
{
bin[i] = 1;
num = num>>1;
}
printf(«The binary form of the number you entered is: «);
for(i=0; i<32; i++)
{
printf(«%d»,bin[i]);
}
return 0;
}
Aquí está la salida en mi caso:
Enter any number: 15 The binary form of the number you entered is: 00000000000000000000000000001111
Conclusión
Los cuatro ejemplos que hemos mostrado aquí deberían bastar para darte una buena idea de cómo se pueden utilizar los operadores bit a bit en situaciones reales. Pruébalos en tus máquinas, modifícalos y haz que hagan más cosas o algo nuevo. En caso de duda o consulta, deja un comentario aquí.