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 :

  • les opérateurs de décalage (>>, >>>, et <<),
  • l'opérateur d'inversion (~),
  • les opérateurs booléens (&, |, ^ et !).

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 
0011 1100 et donc retourne 60*/
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 
0000 0101 et donc retourne 5*/
-16 >> 2 /*1111 0001 décalé de 2 bits produit
1111 1100 et donc retourne -4*/
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 
0000 0111 et donc retourne 7*/

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