Linux C Programmeren Handleiding Deel 14 – Bitwise operatoren praktische voorbeelden

In een van onze eerdere artikelen bespraken we de basisprincipes van bitwise operatoren. Ik hoop dat je dat artikel doorgenomen hebt en nu klaar bent om enkele praktische gebruiksvoorbeelden van deze operatoren mee te maken en te begrijpen. Dus zonder verder oponthoud, laten we beginnen.

1. Verwissel waarden van twee variabelen

Je kent vast wel de logica om de waarden van twee variabelen te verwisselen. Het houdt in dat je een derde variabele neemt om tijdelijk een waarde op te slaan en die waarde dan aan een van de variabelen toewijst (waarvan de oorspronkelijke waarde al aan de andere variabele is toegekend).

Bijvoorbeeld, als ‘a’ en ‘b’ variabelen zijn waarvan de waarden verwisseld moeten worden, en ‘c’ is de tijdelijke variabele, dan gaat de standaard logica als volgt:

c = a;
a = b;
b = c;

Maar wist je dat dit hele verwisselen ook via bitwise operatoren kan? Ja, dat is waar, en de logica heeft in dat geval niet eens een derde variabele nodig. Hier is de code:

#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;
}

Hier is de uitvoer:

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. Controleer het aantal binaire ‘1’s in een getal

Soms kun je in een situatie komen waarin je het aantal bits moet tellen dat in een getal op ‘1’ is gezet. Je zult blij zijn te weten dat je dit gemakkelijk kunt doen met bitwise operatoren. Hier is de 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;
}

Hier is de output:

Enter a number: 5 

Number of binary 1s in this number is 2

3. C programma om te controleren of gegeven bit positie 1 is of niet

Soms, vooral als je werkt aan een code die te maken heeft met computernetwerken (protocollen enz.), moet je nagaan of een bepaalde bit positie op 1 staat of niet. Dit kun je gemakkelijk doen met bitwise operatoren.

Hier is de code:

 #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;
}

Hier is de uitvoer:

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. Zet decimaal getal om in zijn binaire vorm

Bitwise operatoren kunnen ook gebruikt worden om een decimaal getal om te zetten in zijn binaire vorm. Hier is er een logica voor:

#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;
}

Hier was de uitvoer in mijn geval:

Enter any number: 15 
The binary form of the number you entered is: 00000000000000000000000000001111

Conclusie

De vier voorbeelden die we hier getoond hebben moeten genoeg zijn om je een goed idee te geven van hoe bitwise operatoren gebruikt kunnen worden in real-world scenario’s. Probeer ze uit op je machines, stel ze bij, en laat ze meer doen, of iets nieuws. Bij twijfel of vragen, laat hier een reactie achter.