Arithmétique des ordinateurs

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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Arithmétique des ordinateurs

  1. En langage C, quel est le résultat de la soustraction de 1 à 0 pour un entier non signé de 32 bits (unsigned int) ?
  2. Pour l'addition de deux entiers non signés, quelle méthode détermine correctement que le résultat a dépassé la plage représentable (débordement) ?
  3. Quelle description de l'écart entre valeurs représentables voisines en virgule flottante est correcte ?
  4. En simple précision IEEE 754, jusqu'à quelle limite tous les entiers à partir de 0 sont-ils représentables exactement ?
  5. Pour les calculs monétaires, quelle est la principale raison de travailler souvent avec des entiers dont l'unité est la plus petite unité monétaire (1 yen ou 1 cent) plutôt qu'en virgule flottante binaire ?