Les opérateurs au niveau du bit agissent sur les valeurs binaires consituées des nombres 0 et 1.
Dans le langage Java, le signe de la valeur binaire est préservé.
Ces opérateurs sont classés selon trois catégories :
Ces opérateurs agissent essentiellement sur des opérandes de types booléens ou numériques intégraux (byte, short, char, int et long) pour respectivement les opérations logiques ou de décalage.
L'opérateur unaire d'inversion (~) ne peut être appliqué qu'à des opérandes de type numérique intégral (byte, short, char, int et long). Dans ce dernier cas, une inversion de l'ensemble des bits est accomplie avec y compris le signe de la valeur s'il existe.
La promotion arithmétique assure la conversion d'une des opérandes vers le type le plus large d'entre eux afin d'effectuer l'opération de décalage et produit toujours un résultat entier int ou long.
Opérateur | Usage | Description | Exemple |
---|---|---|---|
AND | x & y | Chaque position binaire de l'opérande x est comparée avec la position correspondante de l'opérande y. Dans ce cas, si un 1 est trouvé dans l'une ou l'autre des opérandes, alors l'opérateur retourne un 1, sinon il renvoie un 0. | 1101 & 0111 //retourne 0101 0001 & 1000 //retourne 0000 1001 & 0001 //retourne 0001 |
OR | x | y | Chaque position binaire de l'opérande x est comparée avec la position correspondante de l'opérande y. Dans ce cas, si un 1 est trouvé dans les deux opérandes soit dans l'une, soit dans l'autre, alors l'opérateur retourne un 1, sinon il renvoie un 0. | 1101 | 0111 //retourne 1111 0001 | 1000 //retourne 1001 1001 | 0001 //retourne 1001 |
XOR | x ^ y | Cette opérateur OU EXCLUSIF fonctionne comme le précédent à la seule exception que le 1 ne doit se trouver que dans l'une ou l'autre des opérandes pour produire le résultat 1 sinon il renvoie un 0. | 1101 ^ 0111 //retourne 1010 0001 ^ 1000 //retourne 1001 1001 ^ 0001 //retourne 1000 |
NOT | ! a | L'opérateur unaire NOT retourne un 0 lorsque l'opérande contient un 1 et un 1 pour un 0. | !1101 //retourne 0010 !0001 //retourne 1110 !1001 //retourne 0110 |
Inversion | ~ a | L'opérateur unaire d'inversion retourne un 0 lorsque l'opérande contient un 1 et un 1 pour un 0. | ~x // équivalent à (-x)-1 (~x)+1 // équivalent à -x |
Décalage à gauche | x << n | Cet opérateur déplace la représentation binaire de x de n bits à gauche. La valeur de ces n bits est de zéro. | 15 << 2 /*0000 1111 décalé de 2 bits produit |
Décalage à droite avec préservation du signe | x >> n | Cet opérateur déplace la représentation binaire de x de n bits à droite en propageant le bit de signe. | 10 >> 1 /*0000 1010 décalé de 2 bits produit |
Décalage à droite avec extension de zéros | x >>> n | Cet opérateur décale la première opérande du nombre n indiqué de bits vers la droite. Des bits excédents décalés en dehors vers la droite sont rejetés. Les bits à zéro sont décalés vers la gauche. | 14 >>> 1 /*0000 1110 décalé de 1 bits produit |
Les opérations de décalage à gauche et à droite sont équivalent respectivement à multiplier ou à diviser par 2n.
3 << 2 // retourne 12 soit 3 * 22 32 >> 3 // retourne 4 soit 32 / 23