>> (décalage binaire vers la droite)
Description :
L’opérateur de décalage à droite >> provoque le décalage des bits de l’opérande gauche vers la droite du nombre de positions spécifié par l’opérande droit.
Syntaxe :
variable >> number_of_bits;
Paramètres :
variable : Types de données autorisés : tout type entier (byte, short, int, long, unsigned
short…).
number_of_bits : un nombre positif inférieur à la largeur en bits de la variable. Types de données autorisés : int.
Exemple de code :
int a = 40; // binary: 0000000000101000 int b = a >> 3; // binary: 0000000000000101, decimal: 5
Remarques et avertissements :
Lorsque vous décalez x de y bits vers la droite (x >> y), les y bits les plus à droite de x disparaissent et sont ignorés. Si x est de type non signé (par exemple, unsigned int), les y bits les plus à gauche du résultat sont remplis de zéros. Si x est de type signé (par exemple, un int), son bit le plus à gauche est le bit de signe, qui détermine s’il est positif ou négatif. Dans ce cas, les y bits les plus à gauche du résultat sont remplis par des copies du bit de signe. Ce comportement, appelé « extension de signe », garantit que le résultat a le même signe que x.
int x = -16; // binary: 1111111111110000 int y = 3; int result = x >> y; // binary: 1111111111111110, decimal: -2
Ce comportement n’est peut-être pas souhaité. Si vous souhaitez plutôt que les zéros soient décalés vers la gauche, vous pouvez utiliser un transtypage pour supprimer l’extension de signe :
int x = -16; // binary: 1111111111110000 int y = 3; int result = (unsigned int)x >> y; // binary: 0001111111111110, decimal: 8190
L’extension de signe permet à l’opérateur de décalage à droite >> d’effectuer une division par puissances de 2, même avec des nombres négatifs. Par exemple :
int x = -1000; int y = x >> 3; // integer division of -1000 par 8, provoquant y = -125.
Mais attention à l’arrondi avec les nombres négatifs :
int x = -1001; int y = x >> 3; // la division par décalage arrondit toujours vers le bas, ce qui provoque y = -126 int z = x / 8; // l'opérateur de division arrondit vers zéro, ce qui provoque z = -125
Source : https://docs.arduino.cc/language-reference/en/structure/bitwise-operators/bitshiftRight/