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 ?
- A−7 / 2 vaut −3 et −7 >> 1 vaut −4
- BLes deux valent −4
- 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.
Continuer : 9 autres questions sur Arithmétique des ordinateurs