Opérateurs bit à bit JavaScript

Opérateurs bit à bit JavaScript

Opérateur Nom Description
& AND Si les deux bits sont 1, alors chaque bit est mis à 1
| OR Si l'un des deux bits est 1, alors chaque bit est mis à 1
^ XOR Si un des deux bits est 1, alors chaque bit est mis à 1
~ NOT Inverser tous les bits
<< Déplacement à gauche avec zéros En déplaçant à gauche en poussant un zéro à partir de la droite et en enlevant le bit le plus à gauche.
>> Déplacement à droite signé En déplaçant à droite en poussant une copie du bit le plus à gauche à partir de la gauche et en enlevant le bit le plus à droite.
>>> Déplacement à droite avec zéros En déplaçant à droite en poussant un zéro à partir de la gauche et en enlevant le bit le plus à droite.

Exemple

Opération Résultat Équivaut à Résultat
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScript utilise des nombres binaires de 32 bits pour les opérations binaires

JavaScript stocke les nombres en nombres en virgule flottante de 64 bits, mais toutes les opérations binaires sont exécutées en nombres binaires de 32 bits.

Avant l'exécution de l'opération binaire, JavaScript convertit le nombre en entier signé sur 32 bits.

Après l'exécution de l'opération binaire, le résultat est converti en nombre JavaScript de 64 bits.

Dans cet exemple, des nombres binaires sur 4 bits sans signe sont utilisés. Par conséquent, ~5 retourne 10.

Comme JavaScript utilise des entiers signés sur 32 bits, JavaScript retourne -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

Les entiers signés utilisent le bit le plus à gauche comme signe moins.

Opération binaire AND

Lorsque l'on effectue une opérateur binaire AND sur une paire de bits, si les bits sont tous à 1, le résultat est 1.

Exemple unitaire :

Opération Résultat
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

Exemple à 4 bits :

Opération Résultat
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Opération binaire OR

Lorsque l'on effectue une opérateur binaire OR sur une paire de bits, si l'un des bits est 1, le résultat est 1 :

Exemple unitaire

Opération Résultat
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

Opération à 4 bits :

Opération Résultat
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

Opération binaire XOR

Lorsque l'on effectue une opérateur binaire XOR sur une paire de bits, si les bits sont différents, le résultat est 1 :

Exemple unitaire :

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

Opération binaire AND en JavaScript (&)

Si les bits sont tous à 1, l'opérateur binaire AND retourne 1 :

Décimal Binaire
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Exemple

var x = 5 & 1;

Essayez-le vous-même

Opération binaire OR en JavaScript (|)

Si l'un des bits est 1, l'opération binaire OR renvoie 1 :

Décimal Binaire
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Exemple

var x = 5 | 1;

Essayez-le vous-même

Opération binaire XOR (^) en JavaScript

Si les bits sont différents, XOR renvoie 1 :

Décimal Binaire
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Exemple

var x = 5 ^ 1;

Essayez-le vous-même

Opération binaire NOT (~) en JavaScript

Décimal Binaire
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Exemple

var x = ~5;

Essayez-le vous-même

Déplacement de gauche (<< avec remplissage par des zéros) en JavaScript

C'est un déplacement de gauche avec remplacement par des zéros. Un ou plusieurs zéros sont déplacés à partir de la droite, et le bit le plus à gauche est supprimé :

Décimal Binaire
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Exemple

var x = 5 << 1;

Essayez-le vous-même

Déplacement de droite (>> avec signe) en JavaScript

C'est un déplacement de droite qui conserve le signe. Le bit le plus à gauche est déplacé à partir de la gauche, et le bit le plus à droite est sorti :

Décimal Binaire
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Exemple

var x = -5 >> 1;

Essayez-le vous-même

Déplacement de droite (>>> avec remplissage par des zéros) en JavaScript

C'est un déplacement de droite avec remplacement par des zéros. Un ou plusieurs zéros sont déplacés à partir de la gauche, et le bit le plus à droite est sorti :

Décimal Binaire
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Exemple

var x = 5 >>> 1;

Essayez-le vous-même

Entier signé de 32 bits (nombre binaire)

Il est facile de comprendre un entier 32 bits avec un seul bit configuré :

Représentation binaire Valeur décimale
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

Ajouter plus de positions révèle le modèle binaire :

Représentation binaire Valeur décimale
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

Les nombres négatifs sont le complément binaire de la valeur positive ajouté de 1 :

Représentation binaire Valeur décimale
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

Convertir un décimal en binaire

Exemple

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

Essayez-le vous-même

Convertir un binaire en décimal

Exemple

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

Essayez-le vous-même