Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Maîtriser les opérateurs bit à bit en C : ET, OU, XOR, décalages et complément

Que sont les opérateurs bit à bit ?

Les opérateurs bit à bit manipulent les bits individuels des valeurs entières. Contrairement aux opérateurs arithmétiques qui travaillent sur des nombres entiers, les opérateurs bit à bit agissent sur la représentation binaire, les rendant idéaux pour les tâches critiques en performance telles que les drapeaux, masques de bits et contrôle de périphériques bas niveau.

En C, les opérateurs bit à bit suivants sont disponibles :

Opérateur Signification
&ET bit à bit (Bitwise AND)
|OU bit à bit (Bitwise OR)
^XOR bit à bit (OU exclusif)
~NON bit à bit (complément à un)
<<Décalage à gauche (Left shift)
>>Décalage à droite (Right shift)

Les opérateurs bit à bit sont définis uniquement pour les types entiers ; ils ne s'appliquent pas aux types à virgule flottante comme float ou double.

Les opérations commencent au bit de poids faible (LSB) et progressent vers le bit de poids fort (MSB). Le tableau de vérité suivant résume les résultats binaires :

Opérande x Opérande y x & y x | y x ^ y
00000
01011
10011
11110

Dans les sections suivantes, nous approfondirons chaque opérateur avec des exemples.

ET bit à bit (&)

L'opérateur ET retourne 1 seulement quand les deux bits correspondants sont 1 ; sinon le résultat est 0. Il est couramment utilisé pour masquer les bits indésirables.

Op1 = 0000 1101
Op2 = 0001 1001
Result = 0000 1001

OU bit à bit (|)

L'opérateur OU retourne 1 si au moins un des bits est 1. Il est utile pour définir des bits spécifiques.

Op1 = 0000 1101
Op2 = 0001 1001
Result = 0001 1101

XOR bit à bit (^)

L'opérateur XOR retourne 1 seulement quand les bits diffèrent. Il est pratique pour basculer des bits.

Op1 = 0000 1101
Op2 = 0001 1001
Result = 0001 0100

Programme d'exemple :

#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 - c = %d\n", c);
    c = a | b; /* 21 = 010101 */
    printf("OR - c = %d\n", c);
    c = a ^ b; /* 1 = 000001 */
    printf("XOR - c = %d\n", c);
    return 0;
}

Sortie :

AND - c = 20
OR - c = 21
XOR - c = 1

Opérateurs de décalage bit à bit (<< et >>)

Les opérateurs de décalage déplacent les bits vers la gauche ou la droite d'un nombre spécifié.

Exemple avec un nombre 4 bits 1111 :

x << 2 → 1100
x >> 2 → 0011

Illustration par programme :

#include <stdio.h>
int main() {
    int a = 20; /* 20 = 010100 */
    int c = 0;
    c = a << 2; /* 80 = 101000 */
    printf("Left shift - c = %d\n", c);
    c = a >> 2; /* 5 = 000101 */
    printf("Right shift - c = %d\n", c);
    return 0;
}

Sortie :

Left shift - c = 80
Right shift - c = 5

Complément bit à bit (~)

L'opérateur de complément inverse chaque bit : 1 devient 0 et vice versa. C'est un opérateur unaire appliqué à un seul opérande.

0000 1111 → 1111 0000

Programme d'exemple :

#include <stdio.h>
int main() {
    int a = 10; /* 10 = 001010 */
    int c = ~a; /* -11 en complément à deux */
    printf("Complement - c = %d\n", c);
    return 0;
}

Sortie :

Complement - c = -11

Tous les opérateurs ensemble

Voici un programme concis qui démontre chaque opérateur bit à bit discuté.

#include <stdio.h>
int main() {
    unsigned int x = 48; /* 0011 0000 */
    unsigned int y = 13; /* 0000 1101 */
    int z = 0;
    z = x & y; /* 0 = 0000 0000 */
    printf("AND - x & y = %d\n", z);
    z = x | y; /* 61 = 0011 1101 */
    printf("OR - x | y = %d\n", z);
    z = x ^ y; /* 61 = 0011 1101 */
    printf("XOR - x ^ y = %d\n", z);
    z = ~x; /* -49 = 1111 0100 (complément à deux) */
    printf("NOT - ~x = %d\n", z);
    z = x << 2; /* 192 = 1100 0000 */
    printf("Left shift - x << 2 = %d\n", z);
    z = x >> 2; /* 12 = 0000 1100 */
    printf("Right shift - x >> 2 = %d\n", z);
    return 0;
}

Résultat :

AND - x & y = 0
OR - x | y = 61
XOR - x ^ y = 61
NOT - ~x = -49
Left shift - x << 2 = 192
Right shift - x >> 2 = 12

Points clés à retenir

Langue C

  1. Classes et objets C# : Fondations pour une POO robuste
  2. Maîtriser les classes et méthodes abstraites C# : Guide pratique
  3. Comprendre les classes et méthodes partielles C#
  4. Maîtriser les classes et méthodes sealed en C# : Quand les utiliser, exemples clairs et sécurité du code
  5. Maîtriser les opérateurs C++ : Guide complet avec exemples pratiques
  6. Mots-clés et identificateurs en C : Guide pratique
  7. Maîtriser les opérateurs en programmation C : Guide complet
  8. IoT & Blockchain : Un changement de paradigme pour la confiance et l'efficience des données
  9. Opérateurs C++ expliqués : Types, exemples et programmes d'exemple