JavaScript au niveau du bit

Opérateurs bit à bit JavaScript
Opérateur | Nom | Description |
---|---|---|
& | ET | Met chaque bit à 1 si les deux bits sont à 1 |
| | OU | Définit chaque bit sur 1 si l’un des deux bits est 1 |
^ | XOR | Définit chaque bit sur 1 si un seul des deux bits est 1 |
~ | PAS | Inverse tous les bits |
<< | Décalage à gauche sans remplissage | Se décale vers la gauche en poussant des zéros depuis la droite et laisse tomber les bits les plus à gauche |
>> | Décalage à droite signé | Se décale vers la droite en poussant des copies du bit le plus à gauche depuis la gauche et en laissant tomber les bits les plus à droite |
>>> | Décalage à droite sans remplissage | Se décale vers la droite en poussant des zéros depuis la gauche et laisse tomber les bits les plus à droite |
Exemples
Opération | Résultat | Pareil que | Résultat |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
~ 5 | dix | ~0101 | 1010 |
5 << 1 | dix | 0101 << 1 | 1010 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript utilise des opérandes au niveau du bit 32 bits
JavaScript stocke les nombres sous forme de nombres à virgule flottante 64 bits, mais toutes les opérations au niveau du bit sont effectuées sur des nombres binaires 32 bits.
Avant qu’une opération au niveau du bit ne soit effectuée, JavaScript convertit les nombres en entiers signés 32 bits.
Une fois l’opération au niveau du bit effectuée, le résultat est reconverti en nombres JavaScript 64 bits.
Les exemples ci-dessus utilisent des nombres binaires non signés de 4 bits. Pour cette raison ~ 5 renvoie 10.
Comme JavaScript utilise des entiers signés 32 bits, il ne renverra pas 10. Il renverra -6.
0000000000000000000000000000101 (5)
11111111111111111111111111010 (~5 = -6)
Un entier signé utilise le bit le plus à gauche comme signe moins.
ET au niveau du bit JavaScript
Lorsqu’un ET au niveau du bit est effectué sur une paire de bits, il renvoie 1 si les deux bits sont à 1.
Un petit exemple :
Opération | Résultat |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
dix | 0 |
1 & 1 | 1 |
Exemple 4 bits :
Opération | Résultat |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
OR au niveau du bit JavaScript
Lorsqu’un OU au niveau du bit est effectué sur une paire de bits, il renvoie 1 si l’un des bits est 1 :
Un petit exemple :
Opération | Résultat |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Exemple 4 bits :
Opération | Résultat |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
JavaScript Bitwise XOR
Lorsqu’un XOR au niveau du bit est effectué sur une paire de bits, il renvoie 1 si les bits sont différents :
Un petit exemple :
Opération | Résultat |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
Exemple 4 bits :
Opération | Résultat |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
AND au niveau du bit JavaScript (&)
Bitwise AND renvoie 1 uniquement si les deux bits sont 1 :
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5 & 1 | 0000000000000000000000000000001 (1) |
OR au niveau du bit JavaScript (|)
Le OU au niveau du bit renvoie 1 si l’un des bits est 1 :
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5 | 1 | 0000000000000000000000000000101 (5) |
JavaScript Bitwise XOR (^)
Bitwise XOR renvoie 1 si les bits sont différents :
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
1 | 0000000000000000000000000000001 |
5 ^ 1 | 0000000000000000000000000000100 (4) |
JavaScript au niveau du bit NON (~)
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
~5 | 11111111111111111111111111010 (-6) |
JavaScript (Remplissage zéro) Décalage gauche au niveau du bit (<<)
Il s’agit d’un décalage à gauche de remplissage nul. Un ou plusieurs bits zéro sont introduits à partir de la droite et les bits les plus à gauche tombent :
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
5 << 1 | 0000000000000000000000000001010 (10) |
JavaScript (préservation des signes) Décalage vers la droite au niveau du bit (>>)
C’est un signe préservant le décalage vers la droite. Les copies du bit le plus à gauche sont insérées à partir de la gauche et les bits les plus à droite tombent :
Décimal | Binaire |
---|---|
-5 | 111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111101 (-3) |
JavaScript (Remplissage zéro) Décalage vers la droite (>>>)
Il s’agit d’un décalage vers la droite de remplissage nul. Un ou plusieurs bits zéro sont insérés à partir de la gauche et les bits les plus à droite tombent :
Décimal | Binaire |
---|---|
5 | 0000000000000000000000000000101 |
5 >>> 1 | 0000000000000000000000000000010 (2) |
Nombres binaires
Les nombres binaires avec un seul bit défini sont faciles à comprendre :
Représentation binaire | Valeur décimale |
---|---|
0000000000000000000000000000001 | 1 |
0000000000000000000000000000010 | 2 |
0000000000000000000000000000100 | 4 |
0000000000000000000000000001000 | 8 |
0000000000000000000000000010000 | 16 |
0000000000000000000000000100000 | 32 |
0000000000000000000000001000000 | 64 |
Définir quelques bits supplémentaires révèle le modèle binaire :
Représentation binaire | Valeur décimale |
---|---|
0000000000000000000000000000101 | 5 (4 + 1) |
0000000000000000000000000001101 | 13 (8 + 4 + 1) |
0000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
Les nombres binaires JavaScript sont stockés au format complément à deux.
Cela signifie qu’un nombre négatif est le NON au niveau du bit du nombre plus 1 :
Représentation binaire | Valeur décimale |
---|---|
0000000000000000000000000000101 | 5 |
111111111111111111111111111011 | -5 |
0000000000000000000000000000110 | 6 |
111111111111111111111111111010 | -6 |
0000000000000000000000000101000 | 40 |
111111111111111111111111011000 | -40 |
Conversion de décimal en binaire
Conversion binaire en décimal
Exemple
fonction bin2dec(bin){
retourner parseInt(bin, 2).toString(10);
}
Essayez-le vous-même »
#JavaScript #niveau #bit