In uno dei nostri articoli precedenti, abbiamo discusso le basi degli operatori bit per bit. Spero che tu abbia letto quell'articolo e ora sia pronto per testimoniare e comprendere alcuni esempi pratici di utilizzo di questi operatori. Quindi, senza ulteriori indugi, iniziamo.
1. Scambia i valori di due variabili
Sono sicuro che saresti a conoscenza della logica per scambiare i valori di due variabili. Si tratta di prendere una terza variabile per memorizzare temporaneamente un valore e quindi assegnare quel valore a una delle variabili (il cui valore originale è già stato assegnato all'altra variabile).
Ad esempio, se 'a' e 'b' sono variabili i cui valori devono essere scambiati e 'c' è la variabile temporanea, ecco come va la logica standard:
c = a;
a = b;
b = c;
Ma sapevi che l'intero processo di scambio può essere eseguito tramite operatori bit per bit? Sì, è vero, e la logica, in quel caso, non richiede nemmeno una terza variabile. Ecco il codice:
#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;
}
Ecco l'output:
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. Controlla il numero di '1' binari in un numero
A volte potresti trovarti in una situazione in cui devi contare il numero di bit impostato su "1" in un numero. Sarai felice di sapere che puoi farlo facilmente usando gli operatori bit per bit. Ecco la logica:
#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;
}
Ecco l'output:
Enter a number: 5
Number of binary 1s in this number is 2
3. Programma C per verificare se la posizione data del bit è 1 o meno
A volte, specialmente quando si lavora su un codice correlato alla rete di computer (protocolli, ecc.), è necessario verificare se una particolare posizione di bit è impostata o meno su 1 o meno. Questo può essere fatto facilmente usando gli operatori bit per bit.
Ecco il codice:
#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;
}
Ecco l'output:
Enter a number: 2
Enter the bit position (keeping zero as base index and 31 as max): 3
Bit at the position is 0
Gli operatori bit per bit possono anche essere utilizzati per convertire un numero decimale nella sua forma binaria. Ecco una logica:
#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;
}
Ecco l'output nel mio caso:
Enter any number: 15
The binary form of the number you entered is: 00000000000000000000000000001111
Conclusione
I quattro esempi che abbiamo mostrato qui dovrebbero essere sufficienti per darti una buona idea di come gli operatori bit per bit possono essere utilizzati in scenari del mondo reale. Provali sulle tue macchine, modificali e falli fare di più o qualcosa di nuovo. In caso di dubbi o domande, lascia un commento qui.