>> (décalage du bit à droite)

Description :

L’opérateur de décalage vers la droite >> provoque les bits de l’opérande gauche à décaler vers la droite par le nombre de positions spécifiées par l’opérande droit.

Syntaxe :

variable >> number_of_bits;

Paramètres :

variable : Types de données autorisés : byteintlong .
number_of_bits : un nombre qui est < = 32. Types de données autorisés : int .

Exemple de code :

int a = 40;     // binaire: 0000000000101000
int b = a >> 3; // binaire: 0000000000000101, ou 5 en décimal

 

Remarques et avertissements :

Lorsque vous décalez x vers la droite de y bits (x >> y) et que le bit le plus élevé de x est un 1, le comportement dépend du type de données exact de x. Si x est de type int, le bit le plus élevé est le bit de signe, déterminant si x est négatif ou non, comme nous l’avons vu ci-dessus. Dans ce cas, le bit de signe est copié dans les bits inférieurs, pour des raisons historiques ésotériques :

int x = -16;  // binaire: 1111111111110000
int y = 3;
int result = x >> y; // binaire: 1111111111111110

 

Ce comportement, appelé extension de signe, n’est souvent pas le comportement souhaité. Au lieu de cela, vous souhaiterez peut-être que les zéros soient décalés à partir de la gauche. Il s’avère que les règles de décalage à droite sont différentes pour les expressions int non signées, vous pouvez donc utiliser un transtypage pour supprimer celles qui sont copiées à partir de la gauche :

int x = -16;  // binaire: 1111111111110000
int y = 3;
int result = (unsigned int)x >> y; // binaire: 0001111111111110

 

Si vous faites attention à éviter l’extension de signe, vous pouvez utiliser l’opérateur de décalage vers la droite >> comme moyen de diviser par des puissances de 2. Par exemple :

int x = 1000;
int y = x >> 3; // division entière de 1000 par 8, provoquant y = 125.0001111111111110

 


 

Source : https://www.arduino.cc/reference/en/language/structure/bitwise-operators/bitshiftright/

 

Laisser un commentaire