Les opérateurs bitwise sont ceux qui agissent au niveau binaire. Ils sont souvent très rapides à exécuter et agissent généralement sur deux opérandes.
Vous pouvez utiliser les opérateurs bitwise pour manipuler des nombres binaires, optimiser le code, compresser des données et mettre en œuvre des techniques pour la programmation de graphiques ou de jeux. Comme la plupart des autres langages de programmation, JavaScript offre une excellente prise en charge des opérations bit à bit.
Que sont les opérateurs ?
La plupart des langages de programmation utilisent le concept d' »opérateur », un symbole qui indique à l’interpréteur d’effectuer une opération mathématique, relationnelle ou logique spécifique.
Il existe de nombreux types d’opérateurs JavaScript que vous devez connaître, depuis ceux qui ressemblent à des opérateurs mathématiques standard, tels que « + », jusqu’aux opérateurs qui comparent deux valeurs. Les opérateurs bitwise sont un ensemble spécial qui traite les nombres binaires.
Opérateur Bitwise AND (& 😉
L’opérateur JavaScript bitwise AND (& ;) compare les bits correspondants de deux opérandes binaires – des nombres qui ne contiennent que 0 et 1. Pour chaque paire de bits d’entrée, le bit de sortie correspondant est « 1 » si les deux bits d’entrée sont « 1 » ou « 0 » dans le cas contraire.
Voici la syntaxe de l’opérateur bitwise AND :
a & b
Dans cet exemple, a et b sont les opérandes sur lesquels vous effectuez l’opération bit à bit.
Voici comment fonctionne l’opérateur bitwise AND :
- L’opération ET s’applique à chaque paire de bits correspondants dans a et b de droite à gauche.
- Si les deux bits sont à 1, le résultat est 1. Si l’un des bits est à 0, le résultat est 0.
- Le résultat est un nouveau nombre où chaque bit représente le résultat de l’opération ET sur les bits correspondants de a et b.
Par exemple :
let a = 50; // 00110010
let b = 100; // 01100100
let result = a & b; // 00100000
console.log(result); // 32
Dans l’exemple ci-dessus, a est 50 en décimal, équivalent au nombre binaire 00110010, et b est 100 en décimal, ce qui équivaut au nombre binaire 01100100. L’opérateur ET compare chaque paire de bits correspondants de droite à gauche et produit le nombre binaire résultant 00100000, soit 32 en décimal.
Opérateur OR binaire (|)
L’opérateur OR binaire (|) compare les bits correspondants de deux opérandes et renvoie « 1 » si l’un des bits ou les deux bits sont « 1 » et « 0 » si les deux bits sont « 0 ».
Voici la syntaxe de l’opérateur bitwise OR :
a | b
Où a et b sont les opérandes de l’opération.
L’opérateur OU binaire (|) fonctionne de la même manière que l’opérateur ET binaire. La seule différence est que l’opérateur OR renvoie « 1 » si « l’un » des bits est « 1 » et « 0 » si « les deux » bits sont « 0 ».
Par exemple :
let a = 50; // 00110010
let b = 100; // 01100100
let result = a | b; // 01110110
console.log(result); // 118
Dans l’exemple ci-dessus, l’opérateur OR bit à bit compare chaque paire de bits de droite à gauche (c’est-à-dire, 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1et ainsi de suite). Le nombre binaire résultant est 01110110, soit 118 en décimal.
Opérateur XOR (^) bit à bit
L’opérateur XOR bit à bit (^) compare les bits correspondants de deux opérandes et renvoie « 1 » si l’un des opérandes mais pas les deux est « 1 » et « 0 » si les deux opérandes sont « 1 » ou « 0 ».
Voici la syntaxe de l’opérateur XOR bitwise :
a ^ b
Où a et b sont les opérandes de l’opération.
L’opérateur XOR bit à bit fonctionne de la même manière que les opérateurs OR et AND bit à bit. La seule différence est qu’il renvoie « 1 » si « l’un ou l’autre mais pas les deux » des opérandes est « 1 » et « 0 » si « les deux » opérandes sont « 1 » ou « 0 ».
Par exemple :
let a = 50; // 00110010
let b = 100; // 01100100
let result = a ^ b; // 01010110
console.log(result); // 86
Dans l’exemple ci-dessus, l’opérateur XOR compare chaque paire de bits de droite à gauche (c’est-à-dire, 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0et ainsi de suite). Le nombre binaire résultant est 01010110, soit 86 en décimal.
Opérateur bitwise NOT (~)
L’opérateur bitwise NOT (~) est un opérateur unaire qui opère sur un seul nombre entier en inversant tous ses bits. En d’autres termes, il transforme chaque bit « 0 » en « 1 » et chaque bit « 1 » en « 0 ».
Voici la syntaxe de l’opérateur bitwise NOT :
~c
Où c est l’opérande.
L’opérateur NOT bit à bit fonctionne en inversant tous les bits d’un opérande, y compris les bits de signe.
Par exemple :
let c = 10; // 00001010
let d = -10; // 11110110
console.log(~c); // 11110101
console.log(~d); // 00001001
Dans l’exemple ci-dessus, l’opérateur NOT inverse tous les bits (c’est-à-dire, 0 → 1, 1 → 0), y compris les bits de signe.
Opérateur Left Shift (<< 😉
L’opérateur de décalage vers la gauche décale les bits d’un nombre donné vers la gauche. L’opérateur prend deux opérandes : le nombre à décaler et le nombre de bits à décaler.
Voici la syntaxe de l’opérateur de décalage vers la gauche :
a << b
Où a est l’opérande de l’opérateur de décalage vers la gauche, et b est le nombre de bits dont l’opérateur va décaler l’opérande.
L’opérateur de décalage vers la gauche fonctionne en décalant chaque bit d’un opérande vers la gauche du nombre de positions spécifié et en rejetant les bits excédentaires décalés vers la gauche.
Par exemple :
let a = 50; // 00110010
let b = 2;
let result = a << b; // 11001000
console.log(result); // 200
Dans l’exemple ci-dessus, l’opérateur de décalage vers la gauche a décalé la valeur décimale 50 de la valeur binaire 00110010 de deux places. La valeur binaire résultante est 11001000, soit 200 en décimal.
Opérateur de décalage vers la droite avec propagation de signe (>> 😉
L’opérateur de décalage de signe vers la droite (>> ;) décale les bits d’un nombre vers la droite tout en préservant le signe du nombre original. L’opérateur prend deux opérandes : le nombre à décaler et le nombre de bits à décaler.
Voici la syntaxe de l’opérateur de décalage vers la droite avec propagation du signe :
a >> b
Où a est l’opérande de l’opérateur de décalage vers la droite, et b est le nombre de bits dont l’opérateur va décaler l’opérande.
L’opérateur de décalage vers la droite avec propagation du signe fonctionne de la même manière que l’opérateur de décalage vers la gauche ; la seule différence dans le mode de fonctionnement est que le décalage vers la droite conserve le signe.
Par exemple :
let a = -50; // 11001110
let b = 2;
let result = a >> b; // 11110011
console.log(result); // -13
Dans l’exemple ci-dessus, l’opérateur de décalage vers la droite a déplacé la décimale -50 (11001110) de deux espaces vers la droite, ce qui donne la décimale -13 (11110011).
Opérateur de décalage à droite non signé (>>> 😉
L’opérateur de décalage à droite non signé (>>> ;) décale les bits d’un nombre vers la droite d’un nombre spécifié de positions et remplit les espaces vides à gauche avec des zéros. L’opérateur rejette les bits excédentaires qu’il décale vers la droite.
Voici la syntaxe de l’opérateur de décalage vers la droite non signé :
a >>> b
Où a est l’opérande de l’opérateur de décalage vers la droite, et b est le nombre de bits dont l’opérateur va décaler l’opérande.
L’opérateur de décalage à droite non signé fonctionne de la même manière que le décalage à droite. Cependant, contrairement à l’opérateur de décalage vers la droite (>> ;), il ne préserve pas le signe d’un nombre lors du décalage. Au lieu de cela, il traite le nombre comme un entier non signé et remplit le bit le plus à gauche avec un zéro.
Par exemple :
let a = -5; // 11111111 11111111 11111111 11111011
let b = 2;
let result = a >>> b; // 00111111 11111111 11111111 11111110
console.log(result); // 1073741822
Dans cet exemple, l’opérateur de décalage à droite non signé a déplacé « -5 » de deux espaces vers la droite, supprimant ainsi le signe et donnant la décimale « 1073741822 ».
Les applications des opérateurs bitwise
En manipulant des bits individuels dans les nombres binaires, les opérateurs bitwise peuvent créer des fonctionnalités complexes qui sont autrement difficiles ou impossibles à réaliser avec des opérations arithmétiques traditionnelles.
Comprendre comment utiliser les opérateurs bitwise peut vous aider à créer des applications web plus efficaces et plus performantes.