Qu'est-ce que Décalage arithmétique ?

Décalage à droite d'un entier signé qui recopie le bit de signe dans les bits de poids fort libérés. Décaler un nombre négatif d'un bit vers la droite donne la division par 2 arrondie vers le bas. Insérer des 0 correspond au décalage logique.

Nom japonais: 算術シフト

« Décalage arithmétique » apparaît dans 3 questions d'entraînement réparties sur 2 thèmes, dont Arithmétique des ordinateurs, Circuits logiques.

Domaine: Arithmétique des ordinateurs

S'entraîner : questions sur Décalage arithmétique

Quel est le résultat du décalage arithmétique d'un bit vers la droite de −8 (1111 1000) en entier signé sur 8 bits ?

  1. A124 (0111 1100)
  2. B−16 (1111 0000)
  3. C−4 (1111 1100)
Afficher la réponse et l'explication

Réponse : C. −4 (1111 1100)

Le décalage arithmétique à droite recopie le bit de signe dans le bit de poids fort libéré : 1111 1000 devient 1111 1100, soit −4 en complément à deux. Même pour un nombre négatif, un décalage d'un bit vers la droite divise par 2. Le décalage logique à droite, qui insère un 0 en poids fort, donne 0111 1100 = 124 et change le signe. −16 est le résultat d'un décalage d'un bit vers la gauche. Il faut aussi noter qu'en langage C, le comportement du décalage à droite d'un entier signé était laissé à l'implémentation.

En langage C, quelle combinaison des résultats de −7 / 2 et de −7 >> 1 (décalage arithmétique à droite) en type int est correcte ?

  1. A−7 / 2 vaut −3 et −7 >> 1 vaut −4
  2. BLes deux valent −4
  3. C−7 / 2 vaut −4 et −7 >> 1 vaut −3
Afficher la réponse et l'explication

Réponse : A. −7 / 2 vaut −3 et −7 >> 1 vaut −4

En C (depuis C99), la division entière tronque le résultat vers 0 : −3,5 devient −3. Le décalage arithmétique à droite, lui, arrondit vers le bas (vers l'infini négatif) : décaler −7 (1111 1001) d'un bit vers la droite donne 1111 1100 = −4. Pour les nombres négatifs, décalage et division ne coïncident donc pas. Lorsque le compilateur remplace une division par 2 par un décalage, il ajoute des instructions de correction pour les nombres négatifs. Pour les nombres positifs, les deux coïncident.

« Décalage arithmétique » dans les explications

Questions mentionnant « Décalage arithmétique » (3)

  1. Quel est le résultat du décalage arithmétique d'un bit vers la droite de −8 (1111 1000) en entier signé sur 8 bits ?
  2. En langage C, quelle combinaison des résultats de −7 / 2 et de −7 >> 1 (décalage arithmétique à droite) en type int est correcte ?
  3. Que devient la valeur d'un nombre binaire décalé d'un bit vers la gauche (en l'absence de débordement) ?

Termes associés

Complément à deux Débordement (spill) Absorption (perte de chiffres) Additionneur à retenue anticipée Additionneur à retenue conservée (carry-save) Algorithme de Booth Arbre de Wallace Arithmétique saturée Arrondi au plus proche pair bfloat16

Retour au glossaire