Bitwise Operatorseurs en C : AND, OR, XOR, Shift & Complément

Que sont les bits Operatorseurs ?

Bitwise Operajeudi sont utilisés pour manipuler les données au niveau du bit, également appelé programmation au niveau du bit. Bitwise fonctionne sur un ou plusieurs modèles de bits ou chiffres binaires au niveau de leurs bits individuels. Ils sont utilisés dans les calculs numériques pour accélérer le processus de calcul.

Voici la liste des opérateurs au niveau du bit fournis par le langage de programmation « C » :

Operator Sens
& Opérateur ET au niveau du bit
| Opérateur OR au niveau du bit
^ Opérateur OU exclusif au niveau du bit
~ Le complément du binaire Operator est un opérateur unaire
<< Opérateur de décalage à gauche
>> Opérateur de décalage à droite

Les opérateurs au niveau du bit ne peuvent pas être directement appliqués aux types de données primitifs tels que float, double, etc. Rappelez-vous toujours une chose : les opérateurs au niveau du bit sont principalement utilisés avec le type de données entier en raison de sa compatibilité.

Les opérateurs logiques bit à bit travaillent sur les données petit à petit, en commençant par le bit le moins significatif, c'est à dire le bit LSB qui est le bit le plus à droite, en progressant vers le MSB (Most Significant Bit) qui est le bit le plus à gauche.

Le résultat du calcul des opérateurs logiques au niveau du bit est présenté dans le tableau ci-dessous.

x y x et y x | oui x ^ y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

ET au niveau du bit

Il s’agit de l’un des opérateurs logiques au niveau du bit les plus couramment utilisés. Il est représenté par un seul signe esperluette (&). Deux expressions entières sont écrites de chaque côté de l’opérateur (&).
Le résultat de l’opération AND au niveau du bit est 1 si les deux bits ont la valeur 1 ; sinon, le résultat est toujours 0.

Considérons que nous avons 2 variables op1 et op2 avec les valeurs suivantes :

Op1 = 0000 1101
Op2 = 0001 1001

Le résultat de l'opération AND sur les variables op1 et op2 sera

Result = 0000 1001

Comme on peut le voir, deux variables sont comparées petit à petit. Chaque fois que la valeur d'un bit dans les deux variables est 1, alors le résultat sera 1 ou bien 0.

OU au niveau du bit

Il est représenté par un seul signe de barre verticale (|). Deux expressions entières sont écrites de chaque côté de l'opérateur (|).

Le résultat de l’opération OU au niveau du bit est 1 si au moins une des expressions a la valeur 1 ; sinon, le résultat est toujours 0.

Considérons que nous avons 2 variables op1 et op2 avec les valeurs suivantes :

Op1 = 0000 1101
Op2 = 0001 1001

Le résultat de l'opération OU sur les variables op1 et op2 sera

Result = 0001 1101

Comme on peut le voir, deux variables sont comparées petit à petit. Chaque fois que la valeur d'un bit dans l'une des variables est 1, alors le résultat sera 1 ou bien 0.

OU exclusif au niveau du bit

Il est représenté par un symbole (^). Deux expressions entières sont écrites de chaque côté de l'opérateur (^).

Le résultat de l’opération OU exclusif au niveau du bit est 1 si une seule des expressions a la valeur 1 ; sinon, le résultat est toujours 0.

Considérons que nous avons 2 variables op1 et op2 avec les valeurs suivantes :

Op1 = 0000 1101
Op2 = 0001 1001

Le résultat de l'opération XOR sur les variables op1 et op2 sera

Result = 0001 0100

Comme on peut le voir, deux variables sont comparées petit à petit. Chaque fois qu'une seule variable contient la valeur 1, le résultat est 0, sinon 0 sera le résultat.

Écrivons un programme simple qui démontre les opérateurs logiques au niveau des bits.

#include <stdio.h>
int main() 
{
int a = 20;	/* 20 = 010100 */  
int b = 21;	/* 21 = 010101 */
int c = 0;           

c = a & b;       /* 20 = 010100 */ 
printf("AND - Value of c is %d\n", c );

c = a | b;       /* 21 = 010101 */
printf("OR - Value of c is %d\n", c );

c = a ^ b;       /* 1 = 0001 */
printf("Exclusive-OR - Value of c is %d\n", c );

getch();
}

Sortie :

AND - Value of c is 20
OR - Value of c is 21
Exclusive-OR - Value of c is 1

Opérateurs de décalage au niveau du bit

Les opérateurs de décalage au niveau du bit sont utilisés pour déplacer/décaler les modèles de bits vers la gauche ou vers la droite. Gauche et droite sont deux opérateurs de décalage fournis par 'C' qui sont représentés comme suit :

Operand << n (Left Shift)
Operand >> n (Right Shift)

Ici,

  • un opérande est une expression entière sur laquelle on doit effectuer l'opération de décalage.
  • 'n' est le nombre total de positions de bits que nous devons décaler dans l'expression entière.

L'opération de décalage vers la gauche décalera le nombre « n » de bits vers la gauche. Les bits les plus à gauche de l'expression seront affichés et n bits avec la valeur 0 seront remplis sur le côté droit.

L'opération de décalage vers la droite décalera le nombre « n » de bits vers la droite. Les bits « n » les plus à droite de l’expression seront affichés et la valeur 0 sera remplie sur le côté gauche.

Exemple : x est une expression entière avec les données 1111. Après avoir effectué l'opération de décalage, le résultat sera :

x << 2 (left shift) = 1111<<2 = 1100
x>>2 (right shift) = 1111>>2 = 0011

ShiftLes opérateurs s peuvent être combinés et peuvent alors être utilisés pour extraire les données de l'expression entière. Écrivons un programme pour démontrer l'utilisation des opérateurs de décalage au niveau du bit.

#include <stdio.h>
int main() {
int a = 20;	/* 20 = 010100 */  
int c = 0;           

c = a << 2;	/* 80 = 101000 */
printf("Left shift - Value of c is %d\n", c );

c = a >> 2;	/*05 = 000101 */
printf("Right shift - Value of c is %d\n", c );
return 0;
}

Sortie :

Left shift - Value of c is 80
Right shift - Value of c is 5

Après avoir effectué l'opération de décalage vers la gauche, la valeur deviendra 80 dont l'équivalent binaire est 101000.

Après avoir effectué l'opération de décalage à droite, la valeur deviendra 5 dont l'équivalent binaire est 000101.

Opérateur de complément au niveau du bit

Le complément au niveau du bit est également appelé opérateur de complément à un car il ne prend toujours qu'une seule valeur ou un opérande. C'est un opérateur unaire.

Lorsque nous effectuons un complément sur n'importe quel bit, tous les 1 deviennent des 0 et vice versa.

Si nous avons une expression entière contenant 0000 1111, après avoir effectué une opération de complément au niveau du bit, la valeur deviendra 1111 0000.

L’opérateur de complément au niveau du bit est désigné par le symbole tilde (~).

Écrivons un programme qui démontre l'implémentation de l'opérateur de complément au niveau du bit.

#include <stdio.h>
int main() {
int a = 10;	/* 10 = 1010 */  
int c = 0;           
c = ~(a);      
printf("Complement - Value of c is %d\n", c );
return 0;
}

Sortie :

Complement - Value of c is -11

Voici un autre programme, avec un exemple de tous les opérateurs discutés jusqu'à présent :

#include <stdio.h>
main() {
unsigned int x = 48;	/* 48 = 0011 0000 */  
unsigned int y = 13;	/* 13 = 0000 1101 */
int z = 0;           

z =x & y;       /* 0 = 0000 0000 */ 
printf("Bitwise AND Operator - x & y = %d\n", z );

z = x | y;       /* 61 = 0011 1101 */
printf("Bitwise OR Operator - x | y = %d\n", z );

z= x^y;       /* 61 = 0011 1101 */
printf("Bitwise XOR Operator- x^y= %d\n", z);

z = ~x;          /*-49 = 11001111 */
printf("Bitwise One's Complement Operator - ~x = %d\n", z);

z = x << 2;     /* 192 = 1100 0000 */
printf("Bitwise Left Shift Operator x << 2= %d\n", z );

z= x >> 2;     /* 12 = 0000 1100 */
printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Après avoir compilé et exécuté le programme, il produit le résultat suivant :

Bitwise AND Operator - x & y = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Complement Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

Résumé

  • Les opérateurs au niveau du bit sont un ensemble d'opérateurs spéciaux fourni par « C ».
  • Ils sont utilisés dans la programmation au niveau bit.
  • Ces opérateurs sont utilisés pour manipuler les bits d'une expression entière.
  • Logique, décalage et complément sont trois types d'opérateurs au niveau du bit.
  • L’opérateur de complément au niveau du bit est utilisé pour inverser les bits d’une expression.