1. Aperçu des opérations bit à bit
Dans les ordinateurs modernes, toutes les données sont stockées sous forme binaire, c'est-à-dire deux états : 0 et 1. Les opérations effectuées par les ordinateurs sur des données binaires (telles que l'addition, la soustraction, la multiplication et la division) sont appelées opérations bit à bit, qui sont des opérations qui portent sur chaque bit d'un nombre binaire.
Pour mieux comprendre les opérations bit à bit, voici un exemple simple : supposons que nous ayons le code suivant pour effectuer l'addition de deux entiers :
int a = 35; int b = 47; int c = a + b;
L'ordinateur convertit ces deux entiers sous forme binaire, puis effectue l'addition :
35: 0010 0011 47: 0010 1111 ---------------- 82: 0101 0010
Par conséquent, par rapport à l'utilisation directe des+、-、*、/opérateurs, l'utilisation raisonnable des opérations bit à bit peut améliorer significativement l'efficacité d'exécution du code sur la machine.
2. Aperçu des opérations bit à bit
| Symbole | Description | Règle de l'opération |
|---|---|---|
| & | et | Le résultat est 1 uniquement lorsque les deux bits sont 1. |
| | | ou | Le résultat est 0 uniquement lorsque les deux bits sont 0. |
| ^ | OU EXCLUSIF | Le résultat est 0 si les deux bits sont identiques, et 1 s'ils sont différents. |
| ~ | NON | 0 devient 1, et 1 devient 0. |
| << | Décalage à gauche | Tous les bits sont décalés vers la gauche d'un certain nombre de positions ; les bits de poids fort sont supprimés et les bits de poids faible sont remplis avec 0. |
| >> | Décalage à droite | Tous les bits sont décalés vers la droite d'un certain nombre de positions ; les bits de poids fort sont remplis avec 0 ou le bit de signe. |
3. Opérateur AND bit à bit (&)
Définition: effectue une opération « AND » sur les bits binaires des deux opérandes de données impliqués.
Règle de l'opération:
0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
Résumé: Ce n'est que lorsque les deux bits sont à 1 que le résultat est 1 ; sinon, le résultat est 0.
Par exemple :3 & 5i.e.0000 0011 & 0000 0101 = 0000 0001, par conséquent3 & 5la valeur est 1.
Remarque: Les nombres négatifs participent aux opérations AND bit à bit sous forme de complément à deux.
Applications:
- Mise à zéro: Si vous voulez mettre une unité à zéro, il suffit de lui appliquer un AND avec une valeur dont tous les bits sont à zéro ; le résultat est zéro.
- Extraire les bits spécifiés d'un nombre: Par exemple, prenez les
X = 1010 11104 bits de poids faible d'un nombre, il suffit de trouver un autre nombreY = 0000 1111, puisX & Y = 0000 1110vous pouvez obtenirXles bits spécifiés. - Déterminer impair ou pair: En vérifiant si le bit de poids faible est 0 ou 1 pour déterminer la parité, vous pouvez utiliser
if ((a & 1) == 0)au lieu deif (a % 2 == 0)pour détermineras'il est pair.
4. Opérateur OR bit à bit (|)
Définition: effectue une opération « OR » sur les bits binaires des deux opérandes impliqués.
Règle de l'opération:
0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
Résumé: Tant que l'un d'eux vaut 1, le résultat est 1.
Par exemple :3 | 5i.e.0000 0011 | 0000 0101 = 0000 0111, par conséquent3 | 5la valeur est 7.
Remarque: Les nombres négatifs participent aux opérations OR bit à bit sous forme de complément à deux.
Applications:
- Mettre certains bits à 1: Par exemple, pour mettre les
X = 1010 11104 bits de poids faible d'un nombre à 1, il suffit de trouver un autre nombreY = 0000 1111, puisX | Y = 1010 1111vous pouvez l'obtenir.
5. Opérateur XOR bit à bit (^)
Définition: effectue une opération « XOR » sur les bits binaires des deux opérandes de données impliqués.
Règle de l'opération:
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
Résumé: Si les bits correspondants sont identiques, le résultat est 0 ; s'ils sont différents, le résultat est 1.
Propriétés:
- Loi commutative
- Loi associative :
(a ^ b) ^ c == a ^ (b ^ c) - Pour tout nombre
x, on ax ^ x = 0,x ^ 0 = x - Auto-inverse :
a ^ b ^ b = a ^ 0 = a
Applications:
- Inverser les bits spécifiés: Par exemple, pour inverser le
X = 1010 11104 bits de poids faible d'un nombre, il suffit de trouver un autre nombreY = 0000 1111, puisX ^ Y = 1010 0001vous pouvez l'obtenir. - XOR avec 0 conserve la valeur inchangée: par exemple
1010 1110 ^ 0000 0000 = 1010 1110 - Échanger deux nombres:
void Swap(int &a, int &b) {
if (a != b) {
a ^= b;
b ^= a;
a ^= b;
}
}
6. Opérateur NOT bit à bit (~)
Définition: effectue une opération « NOT » sur les bits binaires de l'unique opérande concerné.
Règle de l'opération:
~1 = 1111 1110 ~0 = 1111 1111
C’est-à-dire :
~1 = -2 ~0 = -1
Résumé: Transformer 0 en 1, et 1 en 0.
Applications:
- Mettre le bit de poids faible d'un nombre à zéro: Par exemple, pour mettre
ale bit de poids faible d'un nombre à 0, cela peut être exprimé par :a & ~1。~1la valeur de ... est1111 1111 1111 1110, puis effectuer une opération « AND », et le bit de poids faible sera certainement 0.
7. Opérateur de décalage à gauche (<<)
Définition: Décaler tous les bits binaires d'un opérande vers la gauche d'un certain nombre de positions ; les bits de poids fort sont écartés et les bits de poids faible sont remplis avec 0.
Par exemple, soita = 1010 1110,a = a << 2vaales bits binaires de ... soient décalés vers la gauche de 2 positions, avec des zéros ajoutés à droite, ce qui donnea = 1011 1000。
Si les bits de poids fort écartés lors du décalage à gauche ne contiennent pas de 1, alors chaque décalage à gauche d'une position équivaut à multiplier le nombre par 2.
8. Opérateur de décalage à droite (>>)
Définition: Décaler tous les bits binaires d'un nombre vers la droite d'un certain nombre de positions ; les bits de poids fort sont remplis avec 0 ou le bit de signe, et le côté droit est écarté.
Par exemple,a = a >> 2vaales bits binaires de ... sont décalés vers la droite de 2 positions, avec le côté gauche rempli de 0 ou du bit de signe, selon que le nombre est positif ou négatif.
Chaque fois qu'un opérande est décalé vers la droite d'une position, cela équivaut à diviser le nombre par 2.
9. Opérateurs d'affectation composés
Les opérateurs bit à bit sont combinés avec les opérateurs d'affectation pour former de nouveaux opérateurs d'affectation composés, qui sont :
&=Exemple :a &= best équivalent àa = a & b|=Exemple :a |= best équivalent àa = a | b>>=Exemple :a >>= best équivalent àa = a >> b<<=Exemple :a <<= best équivalent àa = a << b^=Exemple :a ^= best équivalent àa = a ^ b
Les règles de fonctionnement sont similaires à celles des opérateurs d'affectation composés mentionnés ci-dessus.
Opérations bit à bit sur des données de longueurs différentes:
Si deux données de longueurs différentes subissent une opération bit à bit, le système les aligne par leur extrémité droite, puis effectue l'opération bit à bit.
Prenons comme exemple l'opération « AND » :
En langage C,longtype occupe 4 octets,inttype occupe 2 octets. Si unelongdonnée de type et uneintdonnée de type subissent une « opération AND », après alignement à droite, les bits manquants à gauche sont remplis selon les trois cas suivants :
- Si la donnée entière est positive, les bits à gauche sont remplis avec 16 zéros.
- Si les données entières sont négatives, les bits de gauche sont remplis avec 16 uns.
- Si les données entières sont non signées, les bits de gauche sont également remplis avec 16 zéros.
Par exemple :
long a = 123; int b = 1; long result = a & b;
long a = 123; unsigned int b = 1; long result = a & b;