Tutorial de Programación Linux C Parte 14
En uno de nuestros artículos anteriores, discutimos los conceptos básicos de los operadores bit a bit. Espero que haya leído ese artículo y ahora esté listo para presenciar y comprender algunos ejemplos prácticos de uso de estos operadores. Así que sin más preámbulos, comencemos.
1. Intercambiar valores de dos variables
Estoy seguro de que conoce la lógica para intercambiar valores de dos variables. Implica tomar una tercera variable para almacenar temporalmente un valor y luego asignar ese valor a una de las variables (cuyo valor original ya ha sido asignado a la otra variable).
Por ejemplo, si ‘a’ y ‘b’ son variables cuyos valores deben intercambiarse, y ‘c’ es la variable temporal, así es como funciona la lógica estándar:
c = a; a = b; b = c;
Pero, ¿sabía que todo este proceso de intercambio se puede realizar a través de operadores bit a bit? Sí, eso es cierto, y la lógica, en ese caso, ni siquiera requiere una tercera variable. Aquí está 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; }
Aquí está la salida:
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 en un número
A veces puede encontrarse en una situación en la que necesita contar la cantidad de bits establecidos en ‘1’ en un número. Te alegrará saber que puedes hacer esto fácilmente usando operadores bit a bit. Aquí está 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 C para verificar si la posición de bit dada es 1 o no
A veces, especialmente cuando se trabaja en un código relacionado con redes informáticas (protocolos, etc.), es necesario que verifique si una posición de bit en particular está configurada en 1 o no. Esto se puede hacer fácilmente usando operadores bit a bit.
Aquí está 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; }
Aquí está la salida:
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. Convierte un número decimal a su forma binaria
Los operadores bit a bit también se pueden usar para convertir un número decimal a su forma binaria. Aquí hay 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í estaba 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 mostramos aquí deberían ser suficientes para darle una buena idea de cómo se pueden usar los operadores bit a bit en escenarios del mundo real. Pruébelos en sus máquinas, ajústelos y hágalos hacer más o algo nuevo. Ante cualquier duda o consulta, deja un comentario aquí.